@Before和@After排除

Fin*_*005 2 java session junit hibernate

我正在为我的DAO编写一些测试,并且因为很多测试都使用了保存到我的数据库的测试对象,所以我创建了一个带有@Before和@After注释的setup()和teardown()方法为了避免冗余代码,但其中一个测试,实际上是一个不需要测试对象的测试,调用DAO中包含调用getCurrentSession().clear()的方法(这是一个使用ScrollableResults获取数据的方法)从db中批量生成,并避免内存填满它每隔50行调用flush()和clear()).这会产生一个问题,因为clear()实际上从会话中删除了setup()中创建的测试对象,因此当调用teardown()时会出现错误:

org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [nl.ru.cmbi.pdbeter.core.model.domain.PDBEntry#395]

有没有办法告诉JUnit不要在这个测试中使用setup()和teardown(),或者最好将所有不需要setup()和teardown()的测试放在一个新的测试类中?

mat*_*t b 6

首先,是的,在单独的测试中隔离不需要@Before@After行为的测试是很有意义的.

其次,您可能需要查看Spring Framework对在每次测试结束时自动回滚的数据库事务运行单元测试的支持,这样您就不必担心某些影响状态的测试了.一个外部资源,或询问每个订单中正在运行哪些测试的问题等.将其与内存数据库(如HSQL)结合使用,您甚至不必担心在某个地方运行数据库,使您的构建更加便携.