- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我的 DAO 编写一些测试,因为很多测试使用保存到我的数据库中的测试对象,所以我使用注释 @Before 和 @Before 创建了 setup() 和teardown() 方法@After 分别以避免冗余代码,但其中一个测试(实际上并不真正需要测试对象)调用 DAO 中的一个方法,其中包含调用 getCurrentSession().clear() (这是一种使用 ScrollableResults 的方法)批量从数据库获取数据,并避免内存填满,每 50 行调用一次lush()和clear()。这会产生一个问题,因为clear()实际上从 session 中删除了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() 的测试放在一个新的测试类?
最佳答案
首先,是的,在单独的测试中隔离不需要 @Before
或 @After
行为的测试非常有意义。
其次,您可能想查看 Spring Framework's support for running unit tests within a database transaction在每个测试结束时自动回滚,这样您就不必担心某些测试会影响外部资源的状态,或者询问每个顺序正在运行哪些测试等问题。将其与内存数据库(如 HSQL ),您甚至不需要担心在某个地方有一个正在运行的数据库来运行,从而使您的构建更加可移植。
关于java - @Before 和 @After 排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4078180/
我是一名优秀的程序员,十分优秀!