2009-10-16 41 views
16

我正在爲作爲HTTP服務器運行的應用程序的一部分編寫單元測試。我一直試圖採取的方法是導入包含HTTP服務器的模塊,啓動它。然後,單元測試將使用urllib2來連接,發送數據並檢查響應。Python - 扭曲和單元測試

我們的HTTP服務器正在使用Twisted。這裏的一個問題是,我只是不熟悉Twisted :)

現在,我實例化我們的HTTP服務器並在setUp()方法中啓動它,然後在tearDown()方法中停止它。

問題是,Twisted看起來並不喜歡這樣,它只會運行一個單元測試。在第一個之後,反應堆將不再啓動。

我已經搜查,搜查,搜查,我似乎無法找到答案是有道理的。

我是完全錯誤的方法,還是錯過了一些明顯的東西?

回答

7

我相信在Twisted中進行單元測試時,應該使用TwistedTrial(它是一個核心組件,即在Twisted/trial目錄中帶有Twisted壓縮包)。然而,正如我所指出的URL所說的那樣,該文檔主要是通過查看源代碼(包括各種Twisted項目的源代碼,因爲它們已經通過Trial進行了測試)。

3

有一個known bug與扭曲的(並且可能不會得到固定),其中重起反應導致系統崩潰。

這就是爲什麼你的單元測試不起作用。

除了使用Trial你可能要考慮的是跟你的HTTP服務器就像一個客戶端將單獨的測試系統。

  • Webdriver - 在您的站點周圍驅動瀏覽器會話的API。
  • TestGen4Web - Firefox插件,記錄與網站的交互並可以重播。
4

正如其他人所提到的,你應該使用試用於扭曲的單元測試。

您還應該從下往上的單元測試 - 這就是「單位」,在單元測試暗示。在測試您的界面之前測試您的數據和邏輯。對於HTTP接口,您應該使用模擬請求調用processGET,processPOST等,但只有在測試了這些方法調用的內容後才應該這樣做。每個測試應該假定其他地方測試的單元按設計工作。

如果你說話HTTP,或者你需要一個正在運行的服務器或其它狀態,你可能做更高級別的測試,如功能或集成測試。這不是一件壞事,但你可能想要改變你的問題。

+0

你知道我認爲你是對的。說實話,我做低級單元測試需要做的是僞造「請求」對象(某些功能使用相當多)。 – Dave