我很乐意在Java的Mockito库中使用依赖注入,但是使用Python3的Request
模块几乎没有经验。我试图断言调用prepare
实例的self.assertTrue(mock_request.prepare.called)
方法。但是,测试在断言import requests
import unittest
from unittest import mock
class Engine(object):
def get(self, **kwargs):
session = requests.Session()
req = requests.Request('GET', 'http://www.google.com', params=kwargs).prepare()
response = session.send(req, timeout=1)
class TestEngine(unittest.TestCase):
@mock.patch('requests.Session')
@mock.patch('requests.Request')
def test_get(self, mock_request, mock_session):
e = Engine()
e.get()
self.assertTrue(mock_request.called)
self.assertTrue(mock_request.prepare.called)
if __name__ == '__main__':
unittest.main()
上失败了。有人可以告诉我如何通过测试吗?
android:maxSdkVersion="18"
答案 0 :(得分:4)
您的代码永远不会直接访问prepare
上的Request
。该方法是在Request()
调用的返回值上访问的,因此请使用Mock.return_value
attribute进行测试:
self.assertTrue(mock_request.return_value.prepare.called)
调试模拟问题时,我发现打印出顶级模拟对象的Mock.mock_calls
attribute会很有帮助;对于您的测试打印mock_request.mock_calls
会产生:
[call('GET', 'http://www.google.com', params={}), call().prepare()]
显示确实已访问call().prepare()
(call()
的结果通常可通过Mock.return_value
属性访问,如上所示。