2012-09-19 54 views
1

我經常需要針對Twitter,現在針對其他我不能控制的Web服務API進行編碼。使用外部網絡服務時的測試策略

我試着編寫測試用例,但因爲它似乎太困難:

  1. 我一定要的東西我無法控制(網絡服務)的速度。
  2. 我無法控制的網絡服務的狀態(無法刪除帳戶,鳴叫,並重新啓動)

對於面臨類似情況的人,我想看看他們設計的解決方案。

PS:我很熟悉模擬對象,但我想獲得更具體的經驗教訓 - 例如我使用圖書館與Twitter(Twitter4J)交談,當最後一次看起來不允許我將Twitter服務替換爲模擬對象。

謝謝。

+0

我自己沒做過。但我知道像Fiddler和BrowserMob代理這樣的工具可以攔截HTTP流量並直接發回迴應。我認爲他們都有API,您可以隨時更改規則,但我不積極。您可能可以配置一次該工具,然後啓動/停止它進行測試。你需要一種方式來指定你想要的反應,但如果我面臨類似的挑戰,這是我首先開始研究的方向。 –

+0

圍繞庫構建包裝並模擬包裝。 –

回答

1

在我的項目中(依賴於各種外部Web服務),我專注於失敗事件的測試。因此,當爲Facebook Connect構建單元測試時,我嘗試將垃圾數據傳遞給我的Web服務響應處理方法,以確保我可以處理在我之下變化的服務。成功的事件測試並不是我加入單元測試的原因,因爲它創造了非常多的事情(如時間軸上的事件)。一個可能的解決方法是在您的預期服務中創建一個測試帳戶,並將您的單元測試指向該ID。如果您確保您的Web服務發佈代碼不包含硬編碼的ID(我喜歡創建<Service>Config類,並將其傳遞給<Service>Methods類,如FacebookMethods.auth(FacebookConfig config, String uid)),這使我可以創建一個TestConfig用於將以某種方式修改服務的操作不能撤消或不應該公開看到)。

+0

嗨賈森,感謝您的意見,但根據您的意見,我仍然沒有辦法建立一個完整的迴歸測試套件。最近在我正在進行的一個項目中遇到了一些錯誤,我想在未來避免這些錯誤。 – user1172468