在我們的項目中,我們有很多單元測試。他們有助於保持項目相當充分的測試。如何運行集成測試?
除了他們,我們有一套測試是單元測試,但取決於某種外部資源。我們稱之爲外部測試。例如,他們有時可以訪問Web服務。
雖然單元測試很容易運行,但整合測試有時無法通過:例如,由於超時錯誤。另外,這些測試可能需要很長時間才能運行。
目前,我們保持集成/外部單元測試只是爲了在開發相應功能時運行它們。
對於普通單元測試,我們使用TeamCity進行持續集成。
如何運行集成單元測試以及何時運行它們?
在我們的項目中,我們有很多單元測試。他們有助於保持項目相當充分的測試。如何運行集成測試?
除了他們,我們有一套測試是單元測試,但取決於某種外部資源。我們稱之爲外部測試。例如,他們有時可以訪問Web服務。
雖然單元測試很容易運行,但整合測試有時無法通過:例如,由於超時錯誤。另外,這些測試可能需要很長時間才能運行。
目前,我們保持集成/外部單元測試只是爲了在開發相應功能時運行它們。
對於普通單元測試,我們使用TeamCity進行持續集成。
如何運行集成單元測試以及何時運行它們?
在我們的項目中,我們爲常規/普通單元測試和單獨的套件進行了集成測試。該是兩個原因:
我們使用TeamCity作爲我們的主持續集成服務器和Maven作爲構建系統。我們使用以下算法來運行測試:
mvn clean install
我們觸發集成測試執行的方式是通過配置的TeamCity的integration.tests任務依賴於「主」 continous.build任務,請查看詳情:http://confluence.jetbrains.net/display/TCD4/Dependencies+Triggers
我們只運行集成測試(不包括單元測試)通過:使用
這是對我來說最接近的選擇,除了我們會用模型替換一些集成測試到單元測試。 – Vladimir 2010-04-02 19:02:05
我們在一個巨大的套件中運行所有的測試。它需要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)
爲了支持這項測試中,我們擁有一批對各種集成測試嘲笑式服務器。
您是否需要開發人員在簽入之前運行測試? – 2010-03-31 11:51:08
這是模擬遠程服務的好方法。 我認爲我們不這樣做,因爲有時很難做模擬 - 或者它可能需要一些時間。 有時我甚至不知道遠程ws是如何工作的。 第三件事是,有時測試遠程服務如預期的那樣正常工作會很有幫助。我們遇到了一些情況,主要服務提供商有可能通過一些外部測試發現的問題。 – Vladimir 2010-03-31 12:06:59
@Vladimir:「有時我甚至不知道遙遠的ws是如何工作的」。假。你知道你的應用程序發送和接收什麼。這就是你必須在模型中處理的一切。沒有什麼,只是足以讓測試通過。 – 2010-03-31 13:05:39
我們使用Maven2:maven-surefire-plugin來運行單元測試(在測試階段)和maven-failsafe插件進行集成測試(集成測試階段)。
默認情況下,所有測試在項目構建時運行,但可以使用配置文件關閉集成測試。
在許多情況下,集成測試是模塊的一部分,在某些情況下,也有專門的模塊,只進行集成測試。
其中一個團隊也使用Fitnesse進行驗收測試。這些測試也在專用模塊中。
我們使用Hudson進行CI。
正如本文討論的內容,我想查看如何對集成測試進行分類。現在我可以自己添加:1.測試,檢查我們的軟件與遠程軟件按預期進行通信(如S. Lott所述,可以使用遠程ws模型)。 2.檢查遠程服務是否按預期運行。 – Vladimir 2010-03-31 12:11:53