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

时间:2018-08-28 23:46:02

标签: python django python-unittest python-decorators

为了测试功能标记,我正在使用patch模拟/修补两个函数。

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

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

有没有一种方法可以为一个特定的测试声明/指定哪个装饰器应该首先评估?

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

1 个答案:

答案 0 :(得分:1)

您可以将装饰器分别应用于MyClassTestCase类的每个方法,从而指定评估每种方法的装饰器的顺序。

基本更改:

@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