我正在爲使用外部數據源的Django應用程序編寫測試。顯然,我使用假數據來測試我的類的所有內部工作,但我想對實際的fetcher也進行一些測試。其中之一將需要驗證外部源仍在發送我的應用程序預計格式的數據,這將意味着請求在測試中檢索該信息。測試外部資源一致性/跳過django測試
顯然,當網絡出現問題或數據提供商有停機時間點時,我不希望我們的CI降低。在這種情況下,我想拋出一個警告,跳過該測試方法的其餘部分,並且不會導致整體故障。這樣,如果數據成功到達,我可以檢查它的一致性(如果出現問題,則失敗),但如果無法獲取數據,它會記錄警告,以便我(或其他開發人員)知道快速檢查數據源是否正常。
基本上,我想測試我的外部來源而不依賴它!
Django的測試套件使用Python的unittest模塊(至少,這就是我的使用方式),看起來很有用,因爲它的文檔描述了Skipping tests and expected failures。這個特性顯然是'2.7版本中的新特性',這就解釋了爲什麼我不能使用它 - 我已經從控制檯上檢查過我安裝的單元測試版本,它的版本是1.63!
我無法找到的單元測試中的PyPI以後的版本,所以我不知道我在哪裏可以得到在that document描述的單元測試版本保持和是否會和Django(1.2)工作。
我給的建議顯然是開/在這是否是我的問題:)最好的辦法討論
[編輯 - 更多信息/澄清]
正如我所說的,我顯然是在嘲笑依賴性,並在那做我的測試。但是,我還希望能夠檢查外部資源(通常是API)是否仍然符合我的預期格式,如果存在網絡問題或其服務器暫時關閉,不會關閉CI。我基本上只想檢查資源的一致性。
考慮以下情況...
如果你寫了一個Twitter應用程序,你會爲所有應用程序的方法和行爲測試 - 這些都會使用假Twitter的數據。這爲您的應用程序提供了一套完整的,自包含的測試。問題是,這實際上並沒有檢查應用程序的工作原理,因爲你的應用程序固有地依賴於Twitter的API的一致性。如果Twitter要更改API調用(可能更改URL,參數或響應),則應用程序將停止工作,即使單元測試仍會通過。 (或者,如果他們是completely switch off basic authentication!)
我的用例更簡單 - 我有一個用於導入信息的xml資源。我僞造了資源並測試了我的導入代碼,但是我想要檢查該XML資源的格式是否未更改。
我的問題是關於在Django的測試運行器中跳過測試,所以如果資源不可用而沒有測試失敗,則可以引發警告,特別是獲取支持此行爲的Python版本的unittest模塊。我已經提供了這麼多的背景信息,以允許任何有這方面經驗的人提供替代建議。
對於冗長的問題表示歉意,我知道大多數人現在不會讀這個。 我已經'加粗'了一些重要的部分,以便於閱讀。
這正是我所追求的,謝謝。 (我在2.6,是啊)有趣的想法分開的依賴出來,我會考慮這一點,歡呼聲。 – adamnfish 2010-07-14 13:40:29