2017-12-03 9 views
0

私はPythonモックをテストしようとしていますが、実際の結果ではなく模擬オブジェクトを示す戻り値をpringすると、結果が期待どおりになりません。pythonモックの戻り値が正しくない

import mock 
import unittest 
import constants 
import requests 


class GetAddr(): 
    def __init__(self,name=''):   
     self.name = name 

    def call_api(self): 
     incr = 1 
     self.no_of_calls(incr) 
     r = requests.get('http://test.com') 
     return r.text 

    def no_of_calls(self,incr): 
     counter = incr + 1 
     return counter 

class TestGetAddr(unittest.TestCase): 
    maxDiff = None 

    def test_case_1(self):      
     self.getaddr = mock.MagicMock(GetAddr(name='John')) 
     self.getaddr.return_value = { 
     'return_code':200, 
     'text':'CA, USA' 
     } 
     print self.getaddr.call_api() 


if __name__ == '__main__': 
    unittest.main() 

出力: -

<MagicMock name='mock.call_api()' id='4526569232'> 

期待される結果: - 辞書を印刷するには

{ 
     'return_code':200, 
     'text':'CA, USA' 
     } 

答えて

0

あなたは小さなミスを犯し、ないcall_apiに、オブジェクト上return_valueを設定方法。

class TestGetAddr(unittest.TestCase): 
    maxDiff = None 

    def test_case_1(self):      
     self.getaddr = mock.MagicMock(GetAddr(name='John')) 
     self.getaddr.call_api.return_value = { # <-- notice call_api here 
     'return_code':200, 
     'text':'CA, USA' 
     } 
     print self.getaddr.call_api() 

出力:: - 私は嘲笑として、彼らは何をテストしていない@jonrsharpeは、これらのテストで別の問題があります考え出したよう :を更新しました

{'text': 'CA, USA', 'return_code': 200} 

ここ

は固定バージョンですテストする必要のある実際の方法。

実際のユニットテストを行う方法ではありません。ここではrequestsを模擬したいと考えています。call_apiアサーションに注意を払うし、更新されたバージョンでモックを設定してください:あなたは、彼らがテスト中のはずだコードを嘲笑しましたので、そのテストケースは、* *全く意味がないという広範な問題を逃した

class TestGetAddr(unittest.TestCase): 
    maxDiff = None 

    @mock.patch('requests.get') 
    def test_case_1(self, requests_get_mock): 
     expected_result = 'test.com has been called' 
     response = mock.MagicMock() 
     response.text = expected_result 
     requests_get_mock.return_value = response 

     instance = GetAddr(name='John') 
     result = instance.call_api() 

     self.assertEquals(result, expected_result) 
+1

。その結果、彼らはまだまだ立ち往生しています(https://stackoverflow.com/q/47621235/3001761)。クラスの名前にもかかわらず、この**は 'TestGetAddr'ではありません! – jonrsharpe

+0

@jonrsharpe、指摘してくれてありがとう、私は間違いなく最も重要な詳細を逃した。答えが更新されます。 –

関連する問題