当前位置: 首页 > 知识库问答 >
问题:

Spring boot data jpa@Query本机查询的单元测试用例是否可能?

越俊驰
2023-03-14

我有一个配置了JPA的Spring Boot应用程序。在查询数据库时,我在spring data@query注释的帮助下运行本机sql查询。现在我正计划使用Spring Boot测试框架编写测试用例。是否可以编写测试?

代码:

String searchQuery = "SELECT dh1.* FROM device_hist AS dh1 JOIN (" +
        "SELECT rank() OVER (PARTITION BY dh.device_nm, dh.lst_log_in_user_id ORDER BY lst_chkin_ts DESC), " +
        "dh.device_nm, dh.lst_log_in_user_id, dh.lst_chkin_ts FROM device_hist dh) AS T ON dh1.device_nm = T.device_nm " +
        "AND dh1.lst_log_in_user_id = T.lst_log_in_user_id AND dh1.lst_chkin_ts = T.lst_chkin_ts WHERE T.rank = 1 AND " +
        "dh1.lst_chkin_ts >= :lst_chkin_ts ";

String searchCountQuery = "SELECT count(*) FROM device_hist AS dh1 JOIN (" +
        "SELECT rank() OVER (PARTITION BY dh.device_nm, dh.lst_log_in_user_id ORDER BY lst_chkin_ts DESC), " +
        "dh.device_nm, dh.lst_log_in_user_id, dh.lst_chkin_ts FROM device_hist dh) AS T on h1.device_nm = T.device_nm " +
        "AND dh1.lst_log_in_user_id = T.lst_log_in_user_id AND dh1.lst_chkin_ts = T.lst_chkin_ts WHERE T.rank = 1 " +
        "AND dh1.lst_chkin_ts >= :lst_chkin_ts ";

@Query(value = searchQuery + "ORDER BY dh1.device_nm, dh1.lst_chkin_ts DESC",
        countQuery = searchCountQuery,
        nativeQuery = true)
Page<DeviceHistory> findAllLatestDeviceHistoryBylastCheckInTimeStamp(
        @Param("lst_chkin_ts") Date lastCheckInTimeStamp, Pageable pageable);

测试案例:

@Test
void testfindAllLatestDeviceHistoryBylastCheckInTimeStamp() {
    LocalDate localDateTime = LocalDate.now();
    ZoneId defaultZoneId = ZoneId.systemDefault();

    Instant instant = localDateTime.minusDays(10).atStartOfDay(defaultZoneId).toInstant();
    Date timeStamp =  Date.from(instant);
    Page<DeviceHistory> devices = deviceHistoryRepository.findAllLatestDeviceHistoryBylastCheckInTimeStamp(timeStamp, pageable);

    assertNotNull(devices.getContent());
}

错误:

在org.springframework.transaction.interceptor.transactionaspectsupport.java:366)在

共有1个答案

白祺然
2023-03-14

我想你在

String searchCountQuery 

异常告诉您,您有一个名为h1表的问题

ERROR: missing FROM-clause entry for table "h1"

据我所知,这个字符串包含h1:“dh.device_nm,dh.lst_log_in_user_id,dh.lst_chkin_ts FROM device_hist dh)As T on h1.device_nm=T.device_nm”(我猜应该是dh1)

通常,如果您面对的是sqlgrammarexception:could not extract resultset,那么这可能是SQL的一个问题。此外,堆栈跟踪的其余部分通常有助于澄清问题。

 类似资料:
  • 问题内容: 我写了一堆查询来进行elasticsearch,我想为它们写一个单元测试。使用此后最小的量,可以进行弹性连接,从而可以进行一般的模拟。但是,当我尝试查看由查询生成的Json时,我没有设法以任何方式获取它。我试图按照这个帖子elsatic查询起订量,但它是只与旧版本的巢的,因为该方法并不再为对象。 我的测试如下: 还有其他方法可以实现我的要求吗? 问题答案: 最好的方法是使用捕获请求字节

  • 问题内容: 如果是跑它运行在您的文件结尾通过运行启动格式的功能和使用(* T testing.T)模块。我想知道文件中的每个功能是同时运行还是确定地分别运行每个功能?是否为每个人创建一个执行例程?如果确实为每个例程创建了一个go例程,是否可以某种方式监视go例程?是否有可能做类似的事情并为每个实例获取一个实例并对其进行监控,诸如此类? 注意:这个问题假设您使用go(测试)随附的测试框架。 问题答案

  • 首先,目标。什么是单元测试?单元测试是测试最小功能的测试,与测试更多功能的集成测试相反,例如: 以任何方式或任何形式生成产品ApplicationContext的测试都不是单元测试; 触及或甚至知道应用程序(标记为@SpringBootApplication)类的测试不是单元测试; 从加载内容的测试不是单元测试 从Spring Cloud Config server加载外部配置测试绝对不是单元测试

  • 问题内容: 我有一个Python 2.7方法,有时会调用 当满足正确的条件时,是否可以进行单元测试以验证是否调用了此代码行? 问题答案: 是。加注,因此您可以使用以下命令进行检查: 的实例具有设置为建议的退出状态的属性,并且返回的上下文管理器将捕获的异常实例设置为,因此检查退出状态很容易: sys.exit文档: 从Python退出。这是通过引发异常来实现的…可以在外部级别拦截出口尝试。

  • 我对Spring中的原生查询有一个问题。我在param value中使用了带有参数nativequery=true注释@query和SQL查询。 而在RezerWacjamanager.java中: 问题是什么时候调用方法RezerWacjadao.getDoStepnosCnatypy(dataOd,dataDo)并执行此查询。我得到一个错误错误: DoStepNosCtypyListdTo.j

  • 问题内容: 我正在Android Studio中运行单元测试。我有一个使用以下代码加载本机库的Java类 但是当我在目录中测试此类时,我得到 我如何才能找到位于本地的.so库的路径,以便进行无误的单元测试? 注:里面的目录我有3个子目录:,和。其中的每一个都包含正确的.so文件。我正在使用 非实验版本 来构建NDK库。 我不想使用其他第三方测试库,因为我所有其他“纯” java类都可以进行单元测试