Spring 2.5 と hibernate 3 に基づく Web アプリを開発しています。最近、JUnit テストを導入し、DBUnit フレームワークを使用していくつかの統合テストを行いました。DBUnit は、あるテストと別のテストの間に xml データセットを使用してデータベースを更新することになっていますが、私が見たようにうまく機能しています。
ただし、テストで要素を更新すると、休止状態がこの情報をキャッチするように見え、次のテストで要素をロードしても、その情報は私が変更したものです。実行が一時停止されているときに DB を見ると、データベースは DBUnit によって適切にリセットされます。したがって、Hibernateの問題である可能性があると思います..
春のコンテキストに新しい休止状態セッションが必要だと言って、テスト間でティアダウンを行う方法はありますか? ところで、私は 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"));
}
テストは @Test アノテーションのみを使用して JUnit 4 で実行され、テスト クラスはライブラリ クラスを拡張しません。
なにか提案を?