我有一个 PythonTestCase
类,其中除一个之外的所有测试方法都需要以相同的方式修补对象。另一种方法需要来自同一对象的一些其他行为。我正在使用mock,所以我做了:
@mock.patch('method_to_patch', mock.Mock(return_value=1))
class Tests(TestCase):
@mock.patch('method_to_patch', mock.Mock(return_value=2))
def test_override(self):
(....)
但这行不通。运行时test_override
,它仍然从类装饰器调用修补的行为。
经过大量调试,我发现在TestSuite
构建过程中,@patch
aroundtest_override
是在 around 之前调用的Tests
,并且由于mock
按顺序应用补丁,类装饰器覆盖了方法装饰器。
这个顺序正确吗?我期待相反的情况,我不确定如何覆盖补丁......也许有一个with
声明?