我有大約10個JUnit會自動執行。我想重新設置每個數據庫。我有這樣一段代碼:在運行JUnit測試之前重置mysql數據庫
//@Transactional
public class TestMediaObjectService extends AbstractDataAccessTest{
//This method reset the database, emptying the tables
@Test
public void testCreateDataBase() throws Exception {
TestDatabaseCreation creation = new TestDatabaseCreation();
creation.resetDatabase();
}
//This is one of the methods.
@Test
public void testStoreMediaObject() throws Exception {
//......
}
當我與我使用的方法testCreateDataBase
和之後運行該測試(沒有那個方法)相同的腳本手動重置數據庫,自動創建的表。但是,如果我運行代碼,我在上面粘貼,未創建的表,所以我得到這個錯誤:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'one_table' doesn't exist
我怎麼能運行在測試運行的其他方法之前,在每一個方法是什麼?註釋@Transactional
已被刪除,但錯誤仍然存在。
此配置不會重置數據庫。它表示測試將在數據庫事務中執行,事務將不會被提交,而是回滾。一切都將發生在實體管理器緩存中或未提交數據庫事務。簡單的單元測試應該這樣工作。更復雜的集成測試不會。 – 2012-01-17 08:22:49
我明白你的觀點,即使這個問題沒有具體說明數據是否真的需要承諾。但是:爲什麼你要在單元測試中實際向數據庫提交數據呢?我能想到的唯一原因是測試數據庫連接或事務環境,或者如果您有分佈式環境。對現有數據的集成測試不應該在單元測試中完成,我認爲該測試不會是獨立的。它應該自己設置所有必需的數據。 – Pete 2012-01-17 08:28:12
謝謝,但數據庫不會重置這些註釋。我得到DuplicateObjectException。我在我的應用程序中進行了一些測試,並且我有一個針對該問題的數據庫。是不是在應用程序本身使用數據庫 – 2012-01-17 08:38:36