【问题标题】:How to patch multiple inputs in python unit test using with statement - no decorators如何使用 with 语句在 python 单元测试中修补多个输入 - 没有装饰器
【发布时间】:2020-10-14 20:26:49
【问题描述】:

我在查看了这两个相似的问题后提出了这个问题:

How to patch multiple repeated inputs in python unit test?

Python mock multiple return values

但都没有令人满意地给我我正在寻找的答案。

我需要能够使用 with 语句而不是装饰器来修补对 input() 的多个调用。

原因是我正在编写的测试不允许我使用装饰器,也不允许修改测试方法的签名以添加模拟输入,如下所示:

@mock.patch('builtins.input')
def test_myMethod(self, mocked_input):
    mock_args = ['20', 100]
    mocked_input.side_effect = mock_args
    res = mymethod()
    self.assertEqual(res, 120)

我的问题是如何使用 as with 语句达到相同的效果:

def test_myMethod(self):
    with mock.patch('builtins.input', ...)

任何帮助将不胜感激

【问题讨论】:

    标签: python unit-testing


    【解决方案1】:

    使用as... 来获取由with 语句创建的模拟实例:

    def test_myMethod(self):
        mock_args = ['20', 100]
        with mock.patch('builtins.input') as mocked_input:
            mocked_input.side_effect = mock_args
            res = mymethod()
        self.assertEqual(res, 120)
    

    或者,您可以将副作用直接传递给patch 调用:

    def test_myMethod(self):
        mock_args = ['20', 100]
        with mock.patch('builtins.input', side_effect=mock_args):
            res = mymethod()
        self.assertEqual(res, 120)
    

    如您所见,在特定情况下执行此操作意味着您甚至不需要对模拟实例的引用。

    【讨论】:

    • 非常感谢。这正是我想要的。
    猜你喜欢
    • 2021-02-10
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    相关资源
    最近更新 更多