【问题标题】:Unit testing with mock and patch [closed]使用模拟和补丁进行单元测试[关闭]
【发布时间】:2017-02-10 04:24:41
【问题描述】:

我正在为函数 f 编写单元测试,该函数导入单元测试不(直接)与之交互的其他函数/类。有什么方法可以从单元测试中修补这些功能(可能在 set_up() 中)?

作为参考,我使用的是 Python 2.7。

从单元测试中,我想修改/修补助手的行为。

在单元测试文件中:

def test_some_function():
    assert(some_function() == True)

在 some_function() 定义中

import helper
def some_function():
    foo = helper.do_something()
    return foo & bar

【问题讨论】:

  • 请提供您的方案的minimal reproducible example。即显示您的代码和测试代码并解释您遇到的问题。
  • 已编辑。希望这就足够了。我不认为我可以粘贴更多的代码,因为这是一个普遍的问题。我知道我可以在单个文件中进行修补等,但我希望能够更改单元测试的行为。我尝试使用 set_up() 补丁命令,但无法正常工作。
  • 那么,你想控制helper.do_something 做什么?换句话说,您正在寻找模拟它来控制它的返回来为some_function 编写单元测试?因为这绝对是可行的
  • 没错!我的第一个问题是这是否可能,所以感谢您澄清这一点。 :) 我该如何去做呢?我已经根据不同的博客尝试了 MagicMock、@patch 等,但似乎没有任何改变单元测试中的行为,只是在本地。

标签: python python-2.7 unit-testing monkeypatching


【解决方案1】:

模拟一个模块是相当标准的,并记录在here。您将看到一个相当明确的示例来说明它是如何完成的。

此外,了解where to patch 以了解如何在其他脚本中正确模拟模块非常重要。

要为您提供一个更明确的代码参考示例,您需要执行以下操作:

import unittest
from unittest.mock import patch

import module_you_are_testing

class MyTest(unittest.TestCase):

    @patch('module_you_are_testing.helper')
    def test_some_function(self, helper_mock):
        helper_mock.do_something.return_value = "something"
        # do more of your testing things here

因此,这里要记住的重要一点是,您在 哪里 引用了 helper 您正在测试。查看我提供的示例代码,您会看到我们正在导入module_you_are_testing。所以,你嘲笑的是。

【讨论】:

    猜你喜欢
    • 2013-03-23
    • 2017-11-15
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    相关资源
    最近更新 更多