2013-08-30 52 views
1

我有一堆集成測試需要在運行之前填充數據庫。這項任務大約需要30分鐘,所以在每次測試之前運行它是不可行的。在別人之前進行集成測試

我使用的是junit,我希望能夠用一些東西來註釋這個類,以便在其他人開始之前運行並完成。這可能嗎?

(大部分註釋我發現只有在方法的工作,例如@rule)

+1

我認爲集成測試不應該測試你的整個填充數據。集成測試通常應該在開始時創建自己的測試數據,並在測試完成後進行清理。對預填充數據進行回覆的集成測試非常難以維護。我認爲你只需要構建你的模式,並且每個測試都應該創建自己的小數據集供自己使用,並在測試完成後進行清理。 – KKKCoder

+0

@KZhang這是進行測試所需的最小數據集,不可能根據各種原因來做你正在說的內容(我可以做你在說什麼的時候......確實看到我爲Scala設備製作的akka​​-patterns貢獻完全是這樣)。 – fommil

回答

0

我已經在過去通過增加安裝和拆卸功能個別測試類,與@BeforeClass@AfterClass註釋做到了這一點。

@BeforeClass 
public static void setupBeforeClass() { 
    DatabasePopulater.populate(); 
} 

@AfterClass 
public static void tearDownAfterClass() { 
    DatabasePopulater.dePopulate(); 
} 

如果有多個測試類需要相同的設置來進行,設置功能可以做一種引用計數,以確保他們只做好自己的工作,在第一時間,它被稱爲:

public class DatabasePopulater { 
    AtomicInteger invocations = new AtomicInteger(); 
    .... 

    public static void populate() { 
     if (0 == ivocations.getAndIncrement()) { 
      // Actually populate DB 
     } 
    } 

    public static void dePopulate() { 
     if (0 == ivocations.decrementAndGet()) { 
      // Actually clear DB 
     } 
    } 
+0

這就是我目前正在做的事情(從一個抽象類,所有的集成測試繼承而來)...我正在尋找一些不涉及管理併發的更乾淨的東西。 – fommil

0

如果你使用類似ant/gradle的東西來執行測試套件,你可以將db數據分成獨立的java程序,然後在junit任務上有一個depends =「populateDB」。

+0

謝謝。該解決方案必須在IntelliJ,Eclipse和高度定製的企業ant框架(我無法控制)中工作。 – fommil

相關問題