根据什么测试用例切换装饰器的顺序 运行?

Switch order of decorators based on what test case is running?

为了测试一个功能标志,我mocking/patching两个功能都打了补丁

但是,每当我切换这些模拟装饰器的顺序时,都会导致一些测试失败。当我再次切换它们时,那​​些失败的测试通过了,而之前通过的测试失败了。

据我所知,这是由于装饰器在 Python 中的评估顺序所致。

有没有办法 declare/specify 对于一个特定的测试应该首先评估哪个装饰器?

@mock.patch.object(MyMockClass, '_some_function', return_value=False)
@mock.patch.object(MyMockClass, '_another_function', return_value=False)
class MyClassTestCase(TestCase):
    # code...

您可以将装饰器单独应用于 MyClassTestCase class 的每个方法,从而指定为每个方法评估装饰器的顺序。

基本变化:

@mock.patch.object(MyMockClass, '_some_function', return_value=False)
@mock.patch.object(MyMockClass, '_another_function', return_value=False)
class MyClassTestCase(TestCase):
    def test_that_it_works(self, *args):
        # do test stuff

收件人:

class MyClassTestCase(TestCase):
    @mock.patch.object(MyMockClass, '_some_function', return_value=False)
    @mock.patch.object(MyMockClass, '_another_function', return_value=False)
    def test_that_it_works(self, mock_another, mock_some):
        # do test stuff