5

在我們的項目中,我們有很多單元測試。他們有助於保持項目相當充分的測試。如何運行集成測試?

除了他們,我們有一套測試是單元測試,但取決於某種外部資源。我們稱之爲外部測試。例如,他們有時可以訪問Web服務。

雖然單元測試很容易運行,但整合測試有時無法通過:例如,由於超時錯誤。另外,這些測試可能需要很長時間才能運行。

目前,我們保持集成/外部單元測試只是爲了在開發相應功能時運行它們。

對於普通單元測試,我們使用TeamCity進行持續集成。

如何運行集成單元測試以及何時運行它們?

+0

正如本文討論的內容,我想查看如何對集成測試進行分類。現在我可以自己添加:1.測試,檢查我們的軟件與遠程軟件按預期進行通信(如S. Lott所述,可以使用遠程ws模型)。 2.檢查遠程服務是否按預期運行。 – Vladimir 2010-03-31 12:11:53

回答

2

在我們的項目中,我們爲常規/普通單元測試和單獨的套件進行了集成測試。該是兩個原因:

  1. 性能:集成測試是慢得多,
  2. 測試的脆弱性:集成測試環境相關條件(產生假陽性)失敗更常因。

我們使用TeamCity作爲我們的主持續集成服務器和Maven作爲構建系統。我們使用以下算法來運行測試:

  1. 我們在Eclipse IDE中和每次提交之前運行單元測試。
  2. 我們運行單元測試後自動每個使用Maven的mvn clean install
  3. 我們上的TeamCity代理自動運行集成測試「主要」構建完成後的TeamCity代理提交。

我們觸發集成測試執行的方式是通過配置的TeamCity的integration.tests任務依賴於「主」 continous.build任務,請查看詳情:http://confluence.jetbrains.net/display/TCD4/Dependencies+Triggers

我們只運行集成測試(不包括單元測試)通過:使用

  • 命名 「SRC /這/ JAVA」 保持一體化 測試單獨的目錄,
  • 排除在默認情況下此源folde r從maven-surefire-plugin配置(配置/排除元素),
  • 使用Maven配置文件調用「集成」來排除常規單元測試幷包含來自「src/it/java」的測試(此配置文件通過傳遞-Pintegration在integration.tests任務中)。
+0

這是對我來說最接近的選擇,除了我們會用模型替換一些集成測試到單元測試。 – Vladimir 2010-04-02 19:02:05

1

我們在一個巨大的套件中運行所有的測試。它需要7分鐘跑步。

我們的集成測試創建了模擬服務器。他們永遠不會超時 - 除非測試需要服務器超時。

所以我們有以下幾種東西。 (代碼示例是Python)

class SomeIntegrationTest(unittest.TestCase): 
    def setUp(self): 
     testclient.StartVendorMockServer(18000) # port number 
     self.connection = applicationLibrary.connect('localhost', 18000) 
    def test_should_do_this(self): 
     self.connection.this() 
     self.assert... 
    def tearDown(self): 
     testClient.KillVendorMockServer(18000) 

這有一些限制 - 它總是爲每個測試分出客戶端模擬服務器。有時候沒問題,有時候開始和結束的時間太多了。

我們也有以下幾種東西

class SomeIntegrationTest(unittest.TestCase): 
    def setUp(self): 
     self.connection = applicationLibrary.connect('localhost', 18000) 
    def test_should_do_this(self): 
     self.connection.this() 
     self.assert... 

if __name__ == "__main__": 
    testclient.StartVendorMockServer(18000) # port number 
    result= unittest.TextTestRunner().run() 
    testclient.KillVendorMockServer(18000) 
    system.exit(result.failures + result.errors) 

爲了支持這項測試中,我們擁有一批對各種集成測試嘲笑式服務器。

+0

您是否需要開發人員在簽入之前運行測試? – 2010-03-31 11:51:08

+0

這是模擬遠程服務的好方法。 我認爲我們不這樣做,因爲有時很難做模擬 - 或者它可能需要一些時間。 有時我甚至不知道遠程ws是如何工作的。 第三件事是,有時測試遠程服務如預期的那樣正常工作會很有幫助。我們遇到了一些情況,主要服務提供商有可能通過一些外部測試發現的問題。 – Vladimir 2010-03-31 12:06:59

+0

@Vladimir:「有時我甚至不知道遙遠的ws是如何工作的」。假。你知道你的應用程序發送和接收什麼。這就是你必須在模型中處理的一切。沒有什麼,只是足以讓測試通過。 – 2010-03-31 13:05:39

3

我們使用Maven2:maven-surefire-plugin來運行單元測試(在測試階段)和maven-failsafe插件進行集成測試(集成測試階段)。

默認情況下,所有測試在項目構建時運行,但可以使用配置文件關閉集成測試。

在許多情況下,集成測試是模塊的一部分,在某些情況下,也有專門的模塊,只進行集成測試。

其中一個團隊也使用Fitnesse進行驗收測試。這些測試也在專用模塊中。

我們使用Hudson進行CI。

+0

感謝提及Fitnesse - 我以前聽說過。現在只是看了演示文稿 - 來自Robert Martin。看起來不錯。我會盡力考慮如何將它整合到我們的目的中!你在Fitnesse有很多驗收測試嗎? – Vladimir 2010-04-01 18:38:05

+0

我的團隊 - 不是,另一個團隊在驗收測試中做了很多事情。 – lexicore 2010-04-01 19:09:01

相關問題