@patch('module1.api.method1')
@patch('module1.api.method2')
class TestApi(unittest.TestCase):
@patch('module1.api.connec1')
@patch('module1.api.connec2')
def test_some_method(self, mockMethod1, mockMethod2,
mockConnec1, mockConnec2):
# some code.....
测试方法中提到的模拟对象的顺序是否应该与patch
相同?我们是否需要为所有类级别和方法级别的补丁提及模拟对象?
如果有大约20个补丁对象,方法是否会相同?
答案 0 :(得分:4)
来自补丁文档:
当您嵌套补丁装饰器时,模拟将传递到 装饰函数以它们应用的顺序排列(普通的Python 应用装饰器的顺序)。这意味着从下往上
因此,您代码中的正确顺序为:
@patch('module1.api.method1')
@patch('module1.api.method2')
class TestApi(unittest.TestCase):
@patch('module1.api.connec1')
@patch('module1.api.connec2')
def test_some_method(self, mockConnec2, mockConnec1, mockMethod2, mockMethod1):
# some code.....
如果您有很多这样的模拟,而您在每个模拟中都不需要做任何事情(例如定义side_effect等),那么为了简便起见,您可以将它们与*args
进行汇总。