2016-05-04 107 views
2
class TestHBVbs3(object): 
     @patch.object(Hbvbs3, 'GetConfigClass') 
     def test_get_grower_list(self, config_data, mock_requests_get): 
      # Arrange 
      config_data.return_value = ConfigMock() 
      post_response = {'1st_key': '1st_value', '2nd_key': '2nd_Value'} 
      mock_requests_get.return_value = MagicMock(status_code=200, post_response=post_response) 

      # Act 
      sut = Hbvbs3() 
      the_response = sut.get_growers_list() 

      # Assert 
      assert_equals(the_response.response["1st_key"], mock_requests_get.return_value.response["1st_key"]) 
      assert_equals(the_response.response["2nd_key"], mock_requests_get.return_value.response["2nd_key"]) 
      assert_equals(the_response.response, mock_requests_get.return_value.response) 
      assert_equals(the_response.status_code, mock_requests_get.return_value.status_code) 

Actual code in hbvbs3.py: 
class Hbvbs3(object): 
     _logger = log.logging.getLogger("Hbvbs3") 

    def get_growers_list(self): 
      dbconfig = GetConfigClass() 

我的問題單元測試: 我無法弄清楚如何成功地使用註釋嘲笑這樣的:@ patch.object(Hbvbs3,「GetConfigClass」)#這片的代碼不起作用。 我不得不最終將GetConfigClass實例化放入實用程序方法中,並模擬該調用,但希望能夠在方法本身中實際模擬此特定實例化方面獲得幫助:「get_growers_list(self):」... - 在我的類Hbvbs3的實例方法中,如何使用模擬註釋成功地模擬這種實例化? 我試圖在註釋中的各種組合,如:這些工作Python的嘲諷使用Py.Test

@patch('Hbvbs3.GetConfigClass') 
@patch.object(Hbvbs3, '__main__.GetConfigClass') 
@patchHbvbs3('_get_growers_list.GetConfigClass') 

無,那麼,有沒有辦法簡單地莫克這種使用註釋Python中實例化?這看起來並不困難,但如果我能找到註釋的正確組合,我就會大傷腦筋。 請讓我知道我要去哪裏錯了? 謝謝!

回答

0

它看起來像你的文件hbvbs3.py代碼有這種import語句的頂部:

from config import GetConfigClass 

...和GetConfigClass作爲你已經證明裏面Hbvbs3。因此,要與Mock實例來替換GetConfigClass,您可以使用patch裝飾形式:

@patch('[...].hbvbsp3.GetConfigClass') 

您需要確保所使用的路徑是對hbvbsp3模塊的完整路徑(更換[...] - 我通常使用爲了清晰起見,從項目的根目錄開始完整的Python路徑)。我總是發現Where to patch上的文檔很有用。

+0

謝謝。我會試試這個,讓你知道它是否有效。我感謝幫助! –