2009-11-10 65 views
0

你好,我在測試中遇到了一個奇怪的行爲。我使用JPA hibernate annotationspring。 讓說,我有一個類MyObject來和它的屬性電子郵件marqued數據庫沒有在單元測試之間掉線

@Column(name="EMAIL", length=100, unique=true) 
private String email; 

我準備什麼,我需要在數據庫中該類MyObjectDAOImplTest

@Autowired 
MyObject1 ob1; 
@Autowired 
MyObject1 ob2; 

@Before 
public void setUP(){ 
    dao = manager.createthedao(); 

    .... 
    ob1.setEmail("[email protected]"); 
    .... 

    .... 
    ob2.setEmail("[email protected]"); 
    .... 
    dao.save(ob1); 
    dao.save(ob2); 

} 

所以我的一個部分的設置從第一種測試方法來看,所有的reste都是failling.I是關於郵件列上的重複值,但是我的hbm2ddl.auto = create,我甚至使用了create-drop。但仍然。我只是不明白。我已經在很多項目中使用過這個,當然沒有,但是我希望每次運行一個測試方法時都會刪除數據庫。是否有關於獨特的我應該注意的事情?感謝你的閱讀。給我你的建議。我是否遺漏了一些東西或者沒有做到一些?

回答

1

你錯過了@After method這就是你看到這種行爲的原因。在運行jUnit 4.x測試時,整個套件會一個接一個地運行在單個線程中,這意味着您必須自己清除狀態或發生未指定的行爲,通常資源會掛起並導致其他單元測試的副作用。

+0

mmmh不知道是這種情況。我已經完成了這個工作。但在我看來,這是我的工作,因爲我認爲我不應該這樣做 – 2009-11-10 20:23:36

1

在每次測試之後(或最好在每次測試之前),您是否不應該有一些代碼來刪除/刪除單元測試數據庫?你確定你實際上是在創建數據庫嗎?你使用的是什麼數據庫引擎?

如果您正在使用一些基於內存的數據庫,您是否在正確的位置初始化它(每次執行測試)?

你在調用SessionFactory.close()嗎?如果您使用的是hibernate.hbm2ddl.auto=create-drop,則應該處理數據庫的丟失。

+0

感謝您的答覆,這裏是我hsql.jdbc.properties jdbc.driverClassName = org.hsqldb.jdbcDriver jdbc.username = SA jdbc.password = jdbc.url =的jdbc:HSQLDB:文件:MYDB;創建= true 我已經切換到mysql,因爲這個問題。當使用hbm2ddl.auto = create-drop進行測試,然後我評論了我的所有測試方法,但是第一個。並且看到數據庫在我刷新數據庫後下降瀏覽器。 – 2009-11-10 19:18:53

+0

請將所有相關的配置文件添加到您的問題。 – 2009-11-10 19:26:08

+0

btw。也許你應該考慮使用內存模式進行測試。 (jdbc.url = jdbc:hsqldb:mem:mydb; create = true)...它應該更快。 – varad 2009-11-11 20:23:04

相關問題