2010-07-13 66 views
2

我正在爲使用外部數據源的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模塊。我已經提供了這麼多的背景信息,以允許任何有這方面經驗的人提供替代建議。

對於冗長的問題表示歉意,我知道大多數人現在不會讀這個。 我已經'加粗'了一些重要的部分,以便於閱讀。

回答

1

我創建了一個單獨的答案,因爲您的修改使我的最後一個答案無效。

我假設你運行的是Python 2.6版本 - 我相信你在單元測試中尋找的改變可以在Python 2.7版本中找到。由於unittest位於標準庫中,因此更新到Python 2.7應該使這些更改可供您使用。這是一個適合你的選項嗎?

我可能會建議的另一個事情是,也許將「外部源格式驗證」測試分爲單獨的測試套件並與其餘的單元測試分開運行。這樣你的核心單元測試仍然很快,你不必擔心外部依賴會打破你的主要測試套件。如果你使用Hudson,那麼創建一個獨立的作業應該很容易,它將爲你處理這些測試。只是一個建議。

+0

這正是我所追求的,謝謝。 (我在2.6,是啊)有趣的想法分開的依賴出來,我會考慮這一點,歡呼聲。 – adamnfish 2010-07-14 13:40:29

0

你想要測試什麼? Django應用程序中的代碼或依賴關係?你能模擬一下外部依賴關係嗎?如果你只是想測試你的Django應用程序,那麼我會說模擬外部依賴,所以你的測試不依賴於外部資源的可用性。

如果你可以發佈你的「實際提取器」的一些代碼,也許你會得到一些關於如何使用mock的提示。

+0

嗨,謝謝你的回答。編寫Django測試我沒有問題。我的問題是最佳實踐之一,並且(假設我的想法是有效的)有助於獲得與Django集成的單元測試的最新版本。我會編輯我的問題以提供更多信息。 – adamnfish 2010-07-14 09:17:13

1

2.7中單元測試的新功能已作爲unittest2被反向移植到2.6。你可以使用pip安裝並用unittest2代替單元測試,你的測試可以像thyey一樣工作,而且你可以在不升級到2.7的情況下獲得新的功能。

+0

啊!太棒了,謝謝。這將涉及到與Django集成的一些小竅門,但需要注意的是,歡呼。 – adamnfish 2010-09-12 10:01:47