2016-09-26 93 views
0

在我的Spring项目中,我使用JUnit4运行某些测试用例。我使用@Transactional删除在测试用例期间对数据库所做的任何更改,以便新的测试用例获得相同的初始数据库状态。问题在于,在我的一个测试用例中,我在数据库中插入了一些值,然后在相同的测试中再次使用它们。它看起来像@Transactional即使在测试用例完成之前也会删除条目,因此我的测试无法按预期运行。我该如何解决这个问题?JUnit4:@Transactional即使在测试用例完成之前也会删除数据

它是这样的

@Test() 
@Transactional 
    // Add entries to db and do some asserts 

    // Use those entries to do some more asserts 
} 

怎么把条目都不见了第二部分不起作用。有人可以请帮助。提前致谢 !!

+0

你尝试调试的问题?你确定事务在方法返回之前回滚?有没有可能你自己的方法之一叫做删除? – TheLostMind

+0

根据你的代码,这似乎与'@ Transactional'无关' – passion

+0

@TheLostMind我试图单独运行测试用例,没有使用事务注释,测试用例按预期运行。我不会包含Transactional,但是班上还有其他的测试用例会受到影响。我不认为我的任何方法都称为删除,因为在那种情况下,如果没有Transactional,它也不起作用。谢谢 !! – varunkr

回答

1

你只能这样做的测试代码,而不是在生产代码

这通常不是手动操纵交易是个好主意,但它应该是罚款一试,你只需要做到这一点:

@Test() 
@Transactional 
    // Add entries to db and do some asserts 
    sessionFactory.getCurrentSession().flush() 
    sessionFactory.getCurrentSession().clear() 
    // Use those entries to do some more asserts 
} 

的方法可以是不同的..但是你可以看到这个想法..

相关问题