2013-03-07 62 views
2

最近,我和我的同事一直在爲Java項目編寫集成測試。大多數這些集成測試需要至少一個SOAP Web服務調用,LDAP查詢或依賴於我們不必控制的端點的其他內容。這些SOAP/LDAP調用中的一些使用也在開發中的庫。使用實時端點與在集成測試中使用模擬端點

這是什麼最終的意思是,當一臺機器發生故障,一個lib改變,或終點改變了我們的集成測試有時會在構建過程中失敗。在做了一些研究之後,我發現人們在集成測試中使用實時端點似乎很常見,但我也發現了有關使用實時端點可能有害的原因的文章(http://martinfowler.com/articles/nonDeterminism.html#RemoteServices)。

我想知道,當創建集成測試什麼更有意義:嘲諷所有端點,或使用活的?似乎使用實時端點,特別是在不可靠時,會使測試不確定。然而,嘲笑似乎他們只會帶你到目前爲止,你將無法測試在類似生產環境中發生的事情。集成測試由純粹的模擬組成,對驗證除了迴歸之外的任何東西是否有價值?

回答

4

當您嘲笑並點擊時,準確地模擬端點是非常重要的。如果您不這樣做,您的測試可能會導致您錯誤地認爲您可以正確地與該服務集成。你正在與正在改變的端點一起工作似乎會使這一點變得困難。

無論您在集成測試或驗收測試級別做到這一點,你應該有一個由實際的端點進行交互的測試,否則你不會知道,如果整合的實際工作。

在你的情況,例如,如果某個庫的變化或端點被改變,你的測試失敗,這其實是在整合失敗的,所以這是來檢測一件好事。如果機器停機,您可以在您的測試中檢測到並報告測試跳過而不是失敗。

因此,在這種情況下,我會用真正的服務,保證您的正常軟件與第三方組件集成。

+0

感謝您的回覆。我明白你在說什麼,但是不是因爲多種原因(lib變更,機器停機,端點改變等)而不能確定的測試嗎?如果我不得不在某個時候忽略它,這是一個好的測試嗎?我覺得這是一個滑坡,導致我不能依賴的測試。 – 2013-03-07 03:35:09

+0

會有一些非確定性的行爲,但這將真正代表您的生產系統。如果您無法控制這些服務,那麼您可以在那裏做的不多,但如果我對真正的服務進行測試,我會感覺更加自信。你總是可以爲你的一些測試寫一個模擬器,但是這會增加很大的維護責任。無論你是否在某個層面上模擬服務,我肯定會有一些測試打擊真實的東西。 – 2013-03-07 03:54:54

+0

有道理。在做了更多的閱讀之後,我發現了另一篇來自Martin Fowler的文章 - http://martinfowler.com/bliki/IntegrationContractTest。html 由於我的終端有點不可靠,我認爲這可能有所幫助 – 2013-03-07 04:01:21

2

你應該嘗試模擬你的端點。有幾個原因這樣做:

  • 性能問題,
  • 沒有壓力的生產環境中,或
  • 如果檢測到了一些錯誤,爲什麼打破生產環境?

您可以在this blog中找到關於此問題的更多信息。

相關問題