我想你需要手動創建腳本。然後,您可以使用ScriptRunner(複製類項目):
public class YourIntegrationTestClass {
private String url = "test-db-url";
private String user = "user";
private String pass = "pass";
// run this before the test
public void prepareDB() {
// executes a script stored in test/resources/cucumber
try {
// use your driver here
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, user, pass);
ScriptRunner runner = new ScriptRunner(conn, false, true);
// use your db creation script here
runner.runScript(new BufferedReader(new FileReader("createDB.sql")));
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
}
// run this after the tests
public void dropDB() {
// use your driver here
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, user, pass);
ScriptRunner runner = new ScriptRunner(conn, false, true);
// use your db drop script here
runner.runScript(new BufferedReader(new FileReader("dropDB.sql")));
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
}
}
您是否真的需要在測試之間重新創建模式,還是隻需要截斷數據? – FGreg
@FGreg - 截斷所有數據並運行import.sql腳本就足夠了。解決方法存在,但我更感興趣,如果有一種方式來運行冬眠的方式... – sm4
我不確定JUnit和Arquillian之間有什麼區別,但我有一個解決方案,用於截斷所有數據的JUnit每次測試後。如果你感興趣,我可以分享它,但我不知道它會有多大用處,因爲它非常依賴JUnit構造。 – FGreg