我很乐意在Java的Mockito库中使用依赖注入,但是对Python3的unittest.mock
模块的使用经验很少。我试图断言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()
您的代码从不直接访问} attribute 来测试该方法:
Request
上的prepare
。该方法是通过调用Request()
的返回值访问的,因此使用^{在调试模拟问题时,我发现打印出顶层模拟对象的^{} attribute 很有帮助;对于您的测试打印
^{pr2}$mock_request.mock_calls
会产生:显示
call().prepare()
确实被访问过(并且call()
的结果通常可以通过Mock.return_value
属性访问,如上所示)。在相关问题 更多 >
编程相关推荐