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.
Criar uma classe de teste pai sem os decoradores - TestParent
que contém o código de seu setUp
mé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.