【发布时间】:2012-07-26 11:17:12
【问题描述】:
我正在开发一个基于 Spring 2.5 和 hibernate 3 的 Web 应用程序。最近我介绍了 JUnit 测试,并使用 DBUnit 框架完成了一些集成测试。 DBUnit 应该在一个测试和另一个测试之间使用 xml 数据集更新数据库,并且它运行良好,正如我所见。
但是,当我在测试中更新一个元素时,hibernate 似乎会捕获此信息,即使我在以下测试中加载该元素,该信息也是我修改过的信息。如果我在执行暂停时查看数据库,则 DBUnit 正确重置了数据库。所以我认为这可能是一个休眠问题..
有没有办法在测试之间进行拆解,说我想为我的 spring 上下文创建一个新的休眠会话?顺便说一句,我没有使用 Spring 注释,而是通过代码获取 Spring 上下文:
String[] contextLocations = new String[2];
contextLocations[0] = "WebContent/WEB-INF/applicationContext.xml";
contextLocations[1] = "src/System_V3/test/applicationContext.xml";
context = new FileSystemXmlApplicationContext(contextLocations);
DBUnit 设置:
@Before
public void setUpBeforeClass() throws Exception {
handleSetUpOperation();
}
private static void handleSetUpOperation() throws Exception {
conn = getConnection();
conn.getConnection().setAutoCommit(false);
final IDataSet data = getDataSet();
try {
DatabaseOperation.REFRESH.execute(conn, data);
} finally {
conn.close();
}
}
private static IDatabaseConnection getConnection() throws ClassNotFoundException, SQLException,
DatabaseUnitException {
Class.forName("org.gjt.mm.mysql.Driver");
return new DatabaseConnection(DriverManager.getConnection(
"jdbc:mysql://localhost:3306/web_database", "root", "pass"));
}
private static IDataSet getDataSet() throws IOException, DataSetException {
ClassLoader classLoader = TestPrueba.class.getClassLoader();
return new FlatXmlDataSetBuilder().build(classLoader
.getResourceAsStream("System_V3/test/dataset.xml"));
}
在 JUnit 4 中仅使用 @Test 注释完成测试,并且测试类不扩展任何库类。
有什么建议吗?
【问题讨论】:
-
当您使用
@Before注释 setupBeforeClass 方法时:您知道@Before和@BeforeClassJUnit4 注释之间的区别吗? -
@Korgen,这个 setUpBeforeClass() 方法在执行每个测试之前调用 DBUnit 将 dataSet 数据插入数据库。是的,我想要这样。
标签: java spring hibernate junit4 dbunit