Como faço para usar mesmos decoradores em mais de uma função em python?

Ashish Singh:

Eu estou testando em django e usando decorador mock.patch.object () para zombando métodos de objectos. Eu quero usar o mesmo decoradores em outro funtion dessa classe. Para isso eu me mudei os decoradores de função para a aula. Isso resolveu o meu problema, mas agora eu quero adicionar outro funtion teste, que não deveria zombar essas funções.

@mock.patch.object(MyClass, 'class_fun_2')
@mock.patch.object(MyClass, 'class_fun_1')
class TestClass(testcases.TestCase):
    def setUp(self):
    # contains my setup that I want to use in all functions for this test class

    def test_function_1(self, mocked_class_fun_1, mocked_class_fun_2):
    # I want to use those mocked functions here

    def test_function_2(self, mocked_class_fun_1, mocked_class_fun_2):
    # I want to use those mocked functions here too

    def test_function_3(self):
    # I do not want to use those mocked functions here

Se eu fizer isso, ele está jogando um erro:

TypeError: test_function_3() takes 1 positional argument but 3 were given

Então, o que eu deveria fazer, para que eu possa usar a configuração de todas as funções e funtions zombaram em apenas dois funtions?

PS: Eu tenho mostrado apenas 2 funtions zombaram, mas na realidade eu estou zombando de 8 funções, de modo repetição de mock.patch pode não ser uma boa idéia.

MatsLindh:

Criar uma classe de teste pai sem os decoradores - TestParentque contém o código de seu setUpmétodo, então herdar desta classe em duas subclasses - um que é decorado, e um que não é:

class TestClassParent(testcases.TestCase):
    def setUp(self):
        # contains my setup that I want to use in all functions for this test class

@mock.patch.object(MyClass, 'class_fun_2')
@mock.patch.object(MyClass, 'class_fun_1')
class TestClassMocked(TestClassParent):
    def test_function_1(self, mocked_class_fun_1, mocked_class_fun_2):
        # I want to use those mocked functions here

    def test_function_2(self, mocked_class_fun_1, mocked_class_fun_2):
        # I want to use those mocked functions here too

class TestClassNotMocked(TestClassParent):
    def test_function_3(self):
        # I do not want to use those mocked functions here

Isso vai permitir que você compartilhe o código de configuração e especificar quais métodos não deve ser ridicularizado.

Acho que você gosta

Origin http://10.200.1.11:23101/article/api/json?id=395840&siteId=1
Recomendado
Clasificación