0
假设我有一个模块中定义的函数:如何嘲笑被测试模块直接导入功能,而不在Python知道模块的名称
module_a.py
def foo():
return 10
而且我想创建一个API来修补功能:
patcher.py
import mock
class Patcher(object):
def __enter__(self):
self.patcher = mock.patch('module_a.foo',
mock.Mock(return_value=15))
self.patcher.start()
def __exit__(self, *args):
self.patcher.stop()
事情是,我不知道将使用我的API模块的名称是什么。这样的测试看起来像这样:
test1.py
from patcher import Patcher
import module_a
with Patcher():
assert module_a.foo() == 15
会工作。但是这样写的一个测试:
test2.py
from patcher import Patcher
from module_a import foo
with Patcher():
assert foo() == 15
将失败。
反正没有让API用户像第一个选项那样编写测试和模块(!)吗?
你不打补丁的功能,他们是*定义*,你补一补,他们正在使用* *。阅读[mock'文档](https://docs.python.org/3/library/unittest.mock.html)。 – jonrsharpe
为这个“未知模块”编写测试的开发人员将知道如何应用模拟补丁。为这些模块编写测试*不是你的工作*。 –
你为什么首先写修补程序? –