Spring Boot应用程序的junit测试用例,它使用非JPA Repository对象

问题描述 投票:1回答:1

我正在编写一个springboot组件,它只负责审计登录操作。由于组件只负责写入数据库,因此表上不会有检索(select)操作。我只是简单地使用@Repository(org.springframework.data.repository.Repository)包和用insert into语句实现的方法来写入数据库。

@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,但我不想使用它们作为使用Repository,并且不同的方法会使应用程序重量轻。

spring spring-boot spring-test spring-boot-test
1个回答
0
投票

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

verify(auditRepository).recordUserAudit(user_id,datetime, function_code, ipAddress);
© www.soinside.com 2019 - 2024. All rights reserved.