[英]python mock return value not correct
我正在尝试测试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'
}
您犯了一个小错误,并在对象而不是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()
输出:
{'text': 'CA, USA', 'return_code': 200}
更新 :正如@jonrsharpe指出的那样,这些测试还有另一个问题-当我嘲笑必须测试的实际方法时,它们不进行任何测试。
如果考虑当前示例,我们想在这里模拟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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.