【发布时间】:2016-08-25 11:40:35
【问题描述】:
我有一个测试类来测试 JPA 存储库的一些功能,我的 JPA 存储库与 H2 数据库连接,我想用我的测试实体填充我的数据库,但我只需要在所有测试之前执行一次,这是我的测试类:
public class EntityRepositoryTest {
@Autowired
EntityJPARepository EntityRepo;
Entity entity;
@Before
public void setup(){
entiti = //initializes entity with values
EntityRepo.save(entiti);
}
//some tests on repo
}
问题是 @Before 注释在每个测试方法之前调用它,我不希望我的实体对象在 H2 db 中重复(因为 save 将在每个方法之前调用),我也不能使用注释@BeforeClass 因为我需要在@autowired 存储库上调用save 方法。如何在所有测试之前只调用一次安装程序,但在存储库自动装配之后仍然调用?
【问题讨论】:
-
为确保每次测试的数据一致性,您应该在每次测试完成后回滚的事务中运行。 @Before 将在同一个事务中执行,因此任何插入都将在下一个测试执行之前回滚。见:stackoverflow.com/questions/17308335/before-and-transactional。然后,您无需编写任何代码来处理此问题。
-
添加@transactional注解也解决了我的问题,谢谢!
标签: java junit spring-data-jpa