【发布时间】:2012-09-15 22:14:24
【问题描述】:
我在我的 Java 应用程序中遇到了一个与单元测试相关的奇怪错误。
在单元测试期间,我使用预先填充了自定义数据的内存 HSQLDB(通过自动触发的插入脚本)和 Hibernate 作为 ORM 来访问它。
问题如下,如果我在单个类(即:TestDummyClass.java)上开始单元测试,则在每个方法测试之后重新创建数据库(从原始插入脚本)。。 p>
如果我在包含多个测试类的整个项目 (src/test) 上启动单元测试,则数据库会在每个测试类的开头初始化,而不是在每个测试方法上初始化。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:com/wizche/app-context-test.xml" })
public class TestDummyClass {
.....
}
这意味着,例如,如果在 TestDummyClass 中我在某些测试方法中更改了数据库(即创建一个新对象),那么新对象将留在那里以用于同一类中的以下测试方法。因此,如果我在项目或单个类上启动它,断言应该会有所不同!
谁能解释一下为什么会这样?我如何决定何时恢复 clean-db?
注意:我正在使用 SpringJUnit4ClassRunner 和整个测试项目的自定义上下文配置(其中没有与单元测试相关的参数)。 NB2:我直接在 SpringEclipse 中启动 JUnit
【问题讨论】:
-
能否提供测试类的配置(注解)?你使用@DirtiesContext 吗?我想这是你需要关注的方向。
-
不,我刚刚更新了帖子
标签: java spring hibernate junit hsqldb