Java Spring Junit数据库在测试类结束时回滚
我有很多现有的SpringJUnit测试。 所有这些测试都扩展了一个抽象测试类。Java Spring Junit数据库在测试类结束时回滚,java,spring,junit4,rollback,spring-test,Java,Spring,Junit4,Rollback,Spring Test,我有很多现有的SpringJUnit测试。 所有这些测试都扩展了一个抽象测试类。 公共类ServiceTest扩展了AbstractServiceTest{ 但是在这个抽象类中,我们重新初始化了数据库,所以它会在每个测试类上重新初始化数据库 @Before @Override public void initGlobal() throws Exception { initDatabase(); ... } 我在问如何在测试类的测试执行结束时对其进行回滚?这样我就可以一次性初始化
公共类ServiceTest扩展了AbstractServiceTest{
但是在这个抽象类中,我们重新初始化了数据库,所以它会在每个测试类上重新初始化数据库
@Before
@Override
public void initGlobal() throws Exception {
initDatabase();
... }
我在问如何在测试类的测试执行结束时对其进行回滚?这样我就可以一次性初始化数据库并回滚每个测试类中的更改我认为有两个配置文件是更好的选择,一个用于测试,另一个用于开发,在测试配置文件上使用基于内存的数据库,如H2(这是一个很好的例子)并且在您的开发配置文件中使用您的主数据库
@Before
@Override
public void initGlobal() throws Exception {
initDatabase();
... }
运行测试时使用测试配置文件。而不是每次运行测试时回滚或删除数据
如果你想在单元测试中使用真实的数据库,我完全不鼓励你这样做。你可以使用spring测试运行程序来注释你的类和回滚事务
@RunWith(SpringJUnit4ClassRunner.class)
@TransactionConfiguration(defaultRollback=true)
public class YourTestClass {
@Test
@Transactional
public void myTestMethod() {
// db will get rolled back at the end of the test
}
}
删除操作后,没有人可以恢复数据。无论如何,您可以在执行操作之前复制表,并保留一个干净的原始表。我在另一个专用于测试的数据库(postgresql)中运行测试,以测试与DBMS相关的错误。我有一个抽象类,在每个类中重新初始化此测试数据库(@Before)。它可以工作,但测试需要很长时间才能完成测试(因为每次我们都会删除数据库并重新初始化它)。因此,我们的想法是使抽象类具有事务性,并在最后进行回滚,以在不重新初始化的情况下回滚更改it@YounessHARDI我更新了我的答案,我希望它能帮助你