8

我前一段時間寫了一個測試,測試我在代碼和第三方API之間編寫的集成。測試確保整合工作正常,並且我們獲得預期的結果。如何測試與第三方API的連接適合持續集成?

今天正式構建失敗,因爲測試在嘗試連接到第三方API時收到500錯誤。

測試這種情況有意義嗎?

+0

沒有它,你的正式版本會完全正常工作嗎?如果不是,那麼是的,測試它。測試一切。墨菲是真實的(和整數)。他*愛*代碼。 – 2011-02-18 18:17:18

回答

8

在我看來,如果第三方(db,webservice等)不可用,集成測試可以失敗。如果你不想測試集成本身,只是簡單的功能,你可以嘲笑你的API的結果和測試他們。在這種情況下,您的測試不再取決於第三方的可用性。

我通常會根據第三方可用性以及「集成」等組屬性標記單元測試,並將它們排除在持續集成過程之外。相反,我讓他們在夜間生成運行。集成測試的時間和價格通常都很高,並且whole point of continuous integration is to provide rapid feedback

2

不,對於您的測試套件在第三方服務關閉時失敗沒有幫助。但是您確實想要全面測試與服務的整合。以下戰略工作很適合我:

  • 模塊中隔離第三方服務(比方說,一個班級,但卻語言進行模塊化是罰款),它確實儘可能少的,除了封裝到連接服務。在類上編寫方法,以便可以區分服務錯誤和錯誤是您的錯誤。例如,將服務關閉異常提供給一個通用的超類。

  • 服務類的編寫單元測試,這樣

    • 如果出現服務下降誤差,測試通過,但記錄錯誤。

    • 如果發生任何其他錯誤,照常失敗。

    編寫這些測試,以便它們針對實時服務運行。應該有少量的這些測試,所以它們不應該爲測試套件運行時創建一個問題。

  • 將所有其他測試(包括集成測試)中的服務類別存根或模擬出來。 (通過這裏的「集成測試」,我正在談論的是測試您自己代碼的所有層次的測試,而不是測試他們是否與第三方服務交互。)

    當在集成測試中對服務類進行存根或模擬時,不要存根或模擬服務類的公共API,而是存根或模擬一些較低級別,或許是用於連接到服務的服務類或庫的內部方法。這可以防止調用服務類時的集成錯誤。在單元測試中,像任何類一樣存根或模擬服務類的公共API。

正如馬丁Buberl暗示,它可能是有幫助的集成測試,其中服務類沒有存根或嘲笑了一個單獨的試運行。說實話,這已經在我參與過的多個項目中討論過了,但我認爲這一切都沒有完成。當第三方服務失敗時,我們總是從生產錯誤(由監控或客戶支持部門報告)中發現它,然後再通過測試瞭解它。