2017-07-08 67 views
-3

我是非常新的蟒蛇模擬,所以只是試圖瞭解相同。在下面的代碼是什麼如下所示1個2語句之間的差,因爲在端我可以設置mock_response.status_code與任一陳述蟒蛇模擬什麼是return_value在以下

import requests 

    def get_data(): 
     response = requests.get('https://www.somesite.com') 
     return response.status_code 

    if __name__ == '__main__': 
     print get_data() 

現在是什麼以下代碼之間的差的,

from call import get_data 
    import unittest 
    from mock import Mock,patch 
    import requests 

    class TestCall(unittest.TestCase): 
     def test_get_data(self): 
      with patch.object(requests,'get') as get_mock: 
       1.get_mock.return_value = mock_response = Mock() 
        # OR 
       2.mock_response = get_mock.return_value 
       mock_response.status_code = 200 
       assert get_data() == 200 

    unittest.main() 

回答

0

望着docs

RETURN_VALUE:當模擬被稱爲返回的值。默認情況下,這是一個新的模擬(在第一次訪問時創建)。請參閱return_value屬性。

你嘲弄requests模塊的get功能。 get方法應該返回一個response對象,稍後您會聲明它的status_code。因此你告訴get模擬函數返回一個模擬response。根據文檔,return_value默認返回一個Mock對象,因此除了1明確創建Mock和2使用默認行爲之外,1和2之間應該沒有差別。

作爲一個附註,該單元測試沒有進行任何測試,因爲您在Mock對象上設置了status_code然後斷言它。它就像:

status_code = 200 
assert status_code == 200