Python3单元测试模拟请求Modu

2024-04-27 05:14:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我很乐意在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()        

Tags: importselfgetrequestsession断言unittestprepare
1条回答
网友
1楼 · 发布于 2024-04-27 05:14:12

您的代码从不直接访问Request上的prepare。该方法是通过调用Request()返回值访问的,因此使用^{} attribute来测试该方法:

self.assertTrue(mock_request.return_value.prepare.called)

在调试模拟问题时,我发现打印出顶层模拟对象的^{} attribute很有帮助;对于您的测试打印mock_request.mock_calls会产生:

^{pr2}$

显示call().prepare()确实被访问过(并且call()的结果通常可以通过Mock.return_value属性访问,如上所示)。在

相关问题 更多 >