2013-06-26 141 views
4

我正在嘗試使用H2或HSQL進行單元測試。但我的應用程序不是春天和冬眠。看起來大部分的參考資料都是針對單元測試的內存數據庫中的HSQL/H2的spring和hibernate。Junit with HSQL/H2 without Spring/Hibernate

有人能指出一個正確的參考,其中只有hsql/h2與junit一起使用嗎?欣賞你的時間。

+0

您使用的數據庫API是什麼? JDBC? –

回答

10

我後容易做這樣的事情:

在@Before方法我建立一個內存數據庫的連接,這樣的事情:

@Before 
public void setup() 
{ 
    this.dbConnection = DriverManager.getConnection("jdbc:hsqldb:mem:testcase;shutdown=true", "sa", null); 
} 

連接存儲在一個實例變量,所以它適用於每個測試。

那麼,如果所有測試共享相同的表,我也創建這些設置()方法中,否則每個測試創建自己的表:

@Test 
public void foo() 
{ 
    Statement stmt = this.dbConnection.createStatement(); 
    stmt.execute("create table foo (id integer)"); 
    this.dbConnection.commit(); 
    ... now run the test 
} 

在@After方法我SIMPLIC關閉連接這指的內存數據庫已被清除,並下試用乾淨的版本上運行:

@After 
public void tearDown() 
    throws Exception 
{ 
    dbConnection.disconnect(); 
} 

有時候我需要運行unitt的測試agains一個真正的數據庫服務器(你不能測試的Postgres或Oracle特定功能使用HSQLDB或H2)。在這種情況下,我只爲每個Testclass建立連接,而不是爲每個測試方法建立一次連接。然後我有方法刪除所有對象以清理模式。

這可以放在一個小實用程序類,以避免一些樣板代碼。如果你想以某種方式外部化測試數據,Apache的DbUtils也可以讓DbUnit變得更容易。

0

我知道我有點遲到了:-)

我有同樣的問題而回,並創建了使用@rule機制設置的內存數據庫的JUnit測試JUnit的整合。我發現它是測試我的數據庫集成代碼的一個真正簡單而好的方法。反饋是值得歡迎的。

源代碼和使用說明可在https://github.com/zapodot/embedded-db-junit

相關問題