使用非 JPA 存储库对象的 Spring Boot 应用程序的 junit 测试用例

junit test cases for SpringBoot application which uses non JPA Repository object

我正在写一个springboot组件,它只是负责审核登录操作。 由于组件只负责写入数据库,不会对 table 进行 retrieve(select) 操作。我只是使用 @Repository(org.springframework.data.repository.Repository) 包和实现的方法与插入语句写入数据库。

@Repository
public interface AuditRepository extends Repository<UserAudit,String> {
    @Modifying
    @Query(value = "insert into user_audit(user_id,datetime,function_code,ip_address) values (:user_id,:datetime,:function_code,:ip_address)",nativeQuery = true)
    @Transactional
    public void recordUserAudit(@Param("user_id")String user_id, @Param("datetime") Timestamp datetime, @Param("function_code") int function_code, @Param("ip_address") String ipAddress);
    }

在 http 请求上执行此方法确实有效。

我想在 H2 数据库上编写 junit 测试,以验证记录是否正确插入。我正在为此使用测试配置文件。在具有 H2 依赖性的测试方法上插入记录似乎也有效 - 但是我目前没有看到验证记录是否存在的方法。

任何建议如何实现?

Ps。我知道这对于 @JpaRepository(org.springframework.data.jpa.repository.JpaRepository) 或 @CrudRepository 都是可能的,但我不想使用它们,因为使用存储库和不同的方法会使应用程序重量轻。

您可以 @Mock 您的 @Repository 对象和 org.mockito.Mockito.verify 并且将能够验证上面写的 Sql 是否在调用时执行。 (认证请求) IE。模拟 AuditRepository 并验证对象。

verify(auditRepository).recordUserAudit(user_id,datetime, function_code, ipAddress);