我的spring-data-jpa后端有一个类,它用大量的测试数据填充(test)数据库。该类使用spring数据存储库创建实体。我的所有实体都有一个用@CreatedData
注解的字段,以及模型类上相应的@EntityListeners(AuditingEntityListener.class)
注解。到目前为止,这工作得很好。dateCreated会自动正确设置。
但是当运行Junit test时,我有时需要创建一个dateCreated在过去的(test)对象。我如何存档这个?只通过普通JDBC?
4条答案
按热度按时间vpfxa7rd1#
如果您使用Sping Boot ,您可以模拟EnableJpaAuditing annotation中使用的dateTimeProvider bean。Spring Data使用此bean获取实体创建/修改时的当前时间。
有必要定义实际的testDateTimeProviderbean,但它根本不会被使用,因为您将使用mock。你可以像往常一样编写mockito方法:
nukf8bse2#
我找到了一种适合我的方法(使用普通JDBC):
首先,我使用spring-data-jpa创建我的域对象进行测试:
这会自动用“now”的时间戳填充“dateCreated”。因为我需要过去的创建日期来进行测试,所以我用普通JDBC手动调整它们:
不要忘记在返回的模型类中也设置CreatedAt。
0yg35tkg3#
我不知道你正在使用的确切测试用例,但我可以看到一些解决方案:
uxhixvfz4#
我发现使用Mockito的最好和最干净的方法是在保存之前更改AuditingHandler,方法是设置DateTimeProvider的旧实现。从Java 8开始,这可以使用Lambda接口来完成: