簡體   English   中英

JUnit和集成測試 - 是否可以在運行的任何測試之前運行一個

[英]JUnit & Integration tests - Is it possible to run one ahead of any test that is run

我從多模塊設置中提取了所有集成測試,並將它們全部放入一個單獨的項目中。 這些集成測試基於spring並使用真正的數據庫。 我正在使用dbmaintain這是一個數據庫版本控制工具,它會自動跟蹤需要應用哪些SQL文件並使數據庫保持正確狀態。

我想要的是能夠在運行任何測試之前運行確保數據庫是最新的代碼。 因此,如果您運行所有測試(在我的情況下來自Eclipse或Maven)它將首先執行db檢查一次,或者如果您運行單個測試,它將首先執行db檢查。 無論運行多少個測試,都應該始終運行db檢查。

現在我想我將在基礎測試類中使用@BeforeClass(所有測試最終都從這個類擴展),這將實例化一個單例來完成它的工作。 那個單身人士將控制一切,以確保只運行一次。

我希望有一個更清潔的方式。

默認情況下,JUnit的Maven運行程序保留重新排序測試的權利。 這實際上是一件好事(tm),因為您可以告訴Maven JUnit插件並行運行測試 ,這意味着您無論如何都不會知道訂單。 此外,可以將其他工具(如TeamCity )設置為首先運行失敗測試。

我認為最好的辦法是將數據庫更新代碼添加為測試套件設置的一部分(不是JUnit框架的一部分)。 使用Exec Maven插件調用您的數據庫代碼,將其綁定到generate-test-resources階段 您需要確保在運行測試時,實際上是在調用Maven來運行測試

JUnit確實具有ExternalResource的概念,這是一種更明確的方式來聲明數據庫依賴性。 它會比基類多幾行代碼,但根據你的需要,它可能更優雅。

在Maven中:(1)添加dbmaintain插件: http//source.mysema.com/display/maven/Maven+Plugins (2a)在調用test(2b)之前顯式調用相應的目標(例如updateDatabase)或者,如果你希望在特定階段執行依賴項,然后maven也支持這一點: http//maven.apache.org/plugins/maven-dependency-plugin/usage.html

然后,您可以將Eclipse連接到這些Maven更改: 如何在Eclipse中保存時啟動Maven“編譯”目標?

JUnit不支持測試排序。 您需要使用TestNG 例如:

@Test(groups = "init")
public void initDatabase() { ... }

@Test(dependsOnGroups = "init")
public void test1() { ... }

@Test(dependsOnGroups = "init")
public void test2() { ... }

在此示例中,將首先運行initDatabase(),並且只有在成功時才運行test1()和test2()。 如果initDatabase()失敗,則test1()和test2()將不會運行, 並且它們將在報告中標記為“skipped”。

另請注意,您可以隨時向任何組添加方法,並且依賴項將按照您期望的方式繼續工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM