简体   繁体   English

Unittests MagicMock 不会在调用时返回值

[英]Unittests MagicMock doesn't return value on call

I wonder why my code doesn't work properly:我想知道为什么我的代码不能正常工作:

class UtilsUnittests(TestCase):
    
    def setUp(self) -> None:
        # Mock LinearMetricsClient
        self.patcher_metrics_client = patch('src.utils.Client')
        self.mock_metrics_client = self.patcher_metrics_client.start()
        self.mock_metrics_client.create = MagicMock(return_value=(200,{}))

    def tearDown(self) -> None:
        self.patcher_metrics_client.stop()

    def test_get_report_data__successful(self):
        data = get_report_data(arg_1, arg_2)

On call it will raise:随叫随到,它将引发:

ValueError: not enough values to unpack (expected 2, got 0)

On call it return just MagicMock object instead of the 200, {}调用它只返回 MagicMock object 而不是200, {}

utils.py file: utils.py文件:

from external_lib.http_clients import Client

def get_report_data(report_query_params, obj_id):
    metrics_client = Client(obj_id)

    code, response_body = metrics_client.create(report_query_params, '/search')
    response_body = json.loads(response_body)
    ...

When I print output of metrics_client.create(report_query_params, '/search') it returns: ___<MagicMock name='Client().create()' id='4337409232'>当我打印 metrics_client.create metrics_client.create(report_query_params, '/search')的 output 时,它返回: ___<MagicMock name='Client().create()' id='4337409232'>

Structure is结构是

|- src
|--- src/utils.py
|- tests
|--- tests/test_main.py

As @mrBeanBremen suggested, I have changed the code a little to return_value logic:正如@mrBeanBremen 建议的那样,我将代码更改为 return_value 逻辑:

    class UtilsUnittests(TestCase):
    
    def setUp(self) -> None:
        # Mock LinearMetricsClient
        self.patcher_metrics_client = patch('src.utils.Client')
        self.mock_metrics_client = self.patcher_metrics_client.start()
        self.mock_metrics_client.return_value.create.return_value = MagicMock(return_value=(200,{}))

    def tearDown(self) -> None:
        self.patcher_metrics_client.stop()

    def test_get_report_data__successful(self):
        data = get_report_data(arg_1, arg_2)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM