2012-08-12 112 views
1

在Python中,我創建了一個讀取網頁內容並對內容執行一些操作的方法。在單元測試中指定模擬變量值

我想單元測試使用特定http地址的方法,但我不想在生產代碼中手動分配地址,然後對其進行測試。所以理想情況下,我想創建一些模擬對象(使用Mock庫),它需要我需要的http地址的值,以便可以使用該值運行我的測試。

作爲一個方面說明,測試的目的是驗證我的代碼與測試的http地址引發正確的異常。

所以要說明這一點,我想測試代碼有以下形式:

Class A 

    method1() 

     var1 = "wwww.something.com" 
     read contents at address var1 
     do stuff with contents (raise error if bad contents) 

我想在我的單元測試,測試與VAR1 =「wwww.somethingelse.com」的代碼(最好使用模擬庫)。

感謝任何幫助。

回答

1

如果你的方法沒有參數,一個無效的URI如何傳遞給它?您應該通過傳入預期會導致您想要測試的行爲的URI來測試您的方法。這樣做不需要使用mock

什麼需要模擬,是,如果這是一個專門的單元測試,在這種情況下,你可能想要模擬出的是在網絡上發出請求的代碼(比方說,urllib2.urlopen)整塊有些東西只是不做任何網絡活動,而是回吐你想測試的任何內容或HTTP錯誤。

作爲一個方面說明,以一種使其更具可測性的方式構建實際生產代碼是完全合理的(並且是可取的)。

+0

謝謝。事實上,我的方法需要幾個參數來建立鏈接。所以如果我想模擬一個HTTP錯誤,我會怎麼做呢? – jule64 2012-08-12 11:42:02

+0

你可以使用['mock.patch'](http://www.voidspace.org.uk/python/mock/patch.html#mock.patch)修飾器修補'yourmodule.urllib2.urlopen', ,用一個模仿其'side_effect = urllib2.HTTPError(無論什麼,參數,你想要,它)'。 – Julian 2012-08-12 14:31:48

+0

明白了,非常感謝 – jule64 2012-08-12 15:08:47