Unit testing 使用mock_open()和补丁进行Python单元测试

Unit testing 使用mock_open()和补丁进行Python单元测试,unit-testing,python-2.7,mocking,Unit Testing,Python 2.7,Mocking,我很难按照文档中的建议用mock_open修补模块的open方法 import my_module import mock def test_foo(): m = mock.mock_open() with patch('my_module.open', m, create=True): my_module.io_func() >>> test_foo() IOError: [Errno 2] No such file or director

我很难按照文档中的建议用mock_open修补模块的open方法

import my_module
import mock

def test_foo():
    m = mock.mock_open()
    with patch('my_module.open', m, create=True):
        my_module.io_func()

>>> test_foo()
IOError: [Errno 2] No such file or directory: 'foofile'
知道为什么补丁不起作用吗

或者,按预期执行以下操作:

import my_module
import mock

def test_foo():
    m = mock.mock_open()
    my_module.__builtins__['open'] = m
    my_module.io_func()

然而,这感觉像是一次黑客攻击。

我无法重现您的问题:补丁'my_module.open',m,create=我这边的真正工作。你能发布我的模块代码吗?我猜你在我的_模块中不使用open,而是类似os.open的东西。我认为我的_模块不是这样的。u内置的_uu['open']=m不起作用。无论如何,剪切并粘贴您的代码,创建一个像charmIs一样使用open work的模块有可能在某个地方复制open方法,然后使用副本,例如decorarator?@Michele,您是对的。。玩具代码有效。据我所知,我正在测试的代码和玩具代码之间的唯一区别是,导入更加奢侈。从my_lib.my_sub_lib将my_模块作为mm导入,而不是。。。导入my_module Meta,换行符不粘贴在注释框中?