【发布时间】:2017-08-28 07:56:12
【问题描述】:
我是嘲笑的新手。我查看了mock 模块并了解了如何使用补丁装饰器模拟特定方法或模块。
为了模拟模块中的单个方法,一种方法是:
@mock.patch('module1.method1')
def test_val(self, mock_method1):
mock_method1.return_value = "whatever_i_want"
为了在同一个模块中模拟多个方法,我可以这样做:
@mock.patch('module1.method2')
@mock.patch('module1.method1')
def test_val(self, mock_method1, mock_method2):
mock_method1.return_value = "whatever_i_want"
mock_method1.return_value = "whatever"
我想要的是模拟一个模块中的一些方法并保持其他方法不变。如果我模拟整个模块,那么该模块中的每个方法或属性都会被模拟。
那么,与其像上面展示的那样单独模拟多个方法,有什么方法可以模拟整个模块(只保持某些方法不被模拟)?
【问题讨论】:
-
能否请您发布您正在测试的代码?您可以对其进行重构,以便测试可以使用测试自行配置的对象直接调用它,从而允许您覆盖单个方法或 w/e。您是否正在寻找模拟对象的黑名单方法??
-
@dm03514 很抱歉,我无法发布我的代码。不,我正在寻找一种白名单方法(模拟模块中的所有方法,除了少数需要的方法)
标签: python unit-testing mocking python-unittest