2009-07-27 38 views
0

首先感謝大家閱讀本文。 我想每次運行測試類時都要填充我的數據庫(derby),以便能夠執行像delete或update或deletebyid這樣的測試。 我用爲休眠驅動測試創建初始數據

<property name="hibernate.hbm2ddl.auto">create</property> 

在我的hibernate.cfg.xml文件,所以我很期待數據庫是第一降,每次創建運行測試。 我使用了類構造函數或者設置方法,但是很快就意識到它們被稱爲在類中有一個測試方法的時間(我假設beforetest和其他行爲相同)。 所以我的問題是我如何設置初始數據來使用? 感謝您的閱讀。

回答

1

假設的JUnit 4:有兩組註釋,其可在使用前和運行的實際測試的情況下的方法(或多個)之後觸發代碼的執行:

之前

使用此標記註釋的方法是 ,它由JUnit框架在 之前執行,它調用下一個測試用例方法。

之後與此標記註釋的

方法由JUnit的所述 實際測試用例方法之後執行已運行。

BeforeClass

方法標有此註釋將只執行一次( JUnit的運行的第一個測試例之前)。如果我正確閱讀你的帖子,這個 是你真正想要的選項。

課餘

方法帶有該註釋將只執行一次(後已JUnit的運行 最後一次測試案例)。

import org.junit.Before; 
import org.junit.BeforeClass; 
import org.junit.Test; 

public class SomeTest { 

    @Test 
    public void test1() { 
     System.out.println("test1"); 
    } 

    @Test 
    public void test2() { 
     System.out.println("test2"); 
    } 

    @Before 
    public void setUp() { 

     // Here goes the code, which makes sure, all tests 
     // see the same context 

     System.out.println("setUp"); 
    } 

    @BeforeClass 
    public static void setUpGlobals() { 

     // Expensive hibernate set-up will go here. It is 
     // called only once 

     System.out.println("setUpGlobals"); 
    } 
} 

時會產生輸出

  • setUpGlobals
  • 的setUp
  • TEST1
  • 的setUp
  • TEST2
+0

非常感謝你的解釋。謝謝你 – 2009-07-27 18:50:42

0

對於初始數據設置(使用Dirk描述的註釋),我使用了兩種不同的方法。如果我真的想測試包括ddl腳本在內的整個過程,我可以通過執行操作系統進程並運行適當的命令來刪除和創建該數據庫類型,使我的BeforeClass完全重新創建數據庫。但大多數情況下,我只是在每個測試(或類)的開始和結束時使用Hibernate或SQL刪除來清除表格。這不會測試ddl創建部分,但通常Hibernate配置和其他測試將指示您的數據庫模式是否錯誤。

+0

你好!感謝您的回覆,並基於這一點,我認爲我已經意識到了什麼是錯誤。沒有數據的其餘方法來測試。我不確定BeforeClass插入任何東西。我推動插入testmethod中的初始數據並進行調試(因爲我無法從beforeclass調試),而hbm2ddl被設置爲創建時,我可以看到數據被插入b刪除前一個。所以我有點混淆如何讓這些東西work.i不能張貼我的代碼裏面的評論太任何建議? – 2009-07-28 10:40:47