2016-10-01 149 views
-1

我正在为函数f写入单元测试,该函数导入单元测试不直接与之交互的其他函数/类。有什么办法可以从单元测试中修补这些函数(也许在set_up())中?使用模拟和补丁进行单元测试

仅供参考,我使用Python 2.7。

从unittest中,我想修改/修补helper的行为。

在单元测试文件:

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

在some_function()定义

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

请提供您场景的[mcve]。即显示您的代码和测试代码并解释您遇到的问题。 – idjaw

+0

已编辑。希望这已经足够了。我不认为我可以粘贴更多的代码,因为这是更常见的问题。我知道我可以在单个文件中打补丁等,但我希望能够改变单元测试的行为。我尝试使用set_up()补丁命令,但无法使其工作。 – PK5144

+1

所以,你想控制'helper.do_something'做什么?换句话说,你正在试图控制它的返回来编写'some_function'的单元测试吗?因为这绝对是可行的 – idjaw

回答

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。所以,这是你嘲笑。

相关问题