Я новичок ie в тестировании, я имею в виду, мои предыдущие тесты были максимально простыми. Теперь у меня есть новая обязанность время от времени тестировать сложные классы. Я потратил много времени на поиск и чтение различных постов, документации и вопросов, но это не помогло с некоторыми моментами. Мой вопрос касается собственных атрибутов класса (иногда родительского класса класса тестирования). Я подготовил игрушечный пример для моего вопроса. Упрощенно это выглядит следующим образом.
Структура:
question
├── __init__.py
├── my_class.py
├── parent.py
└── test_classes
├── __init__.py
└── test_my_class.py
my_class.py
from question.parent import ParentClass
class MyClass(ParentClass):
def __init__(self):
self.param2 = 2
def func1(self, some_param):
self.param1 = 3
# plenty of code
important_value = self.param1 + some_param
# more code
some_result = important_value * 2
return some_result
parent.py
class ParentClass:
def __init__(self):
self.param1 = 1
self.special = self.param2
def func(self, smth):
return smth
Полагаю, глупо переписывать весь func1 для проверки таким образом:
test_my_class.py
from question.my_class import MyClass
from unittest import TestCase
from unittest.mock import patch
def new_func1(some_param):
param1 = 3
# plenty of code
important_value = param1 + some_param
# more code
some_result = important_value * 2
return some_result
class TestMyClass(TestCase):
@patch.object(MyClass, 'func1', side_effect=new_func1)
def test_func1(self, some_param):
some_param = 1
my_cl = MyClass()
self.assertEqual(my_cl.func1(some_param), 8)
it работает но это не то что я хочу. Как я могу издеваться над self.param1 из ParentClass? Мне приходится много переписывать и к тому же таких параметров гораздо больше. Это кажется неэффективным. Для тестирования ParentClass и работы с этим ужасным self.special я пропатчил init, но было бы лучше просто издеваться над self.special. Также кажется, что зависимость от ParentClass потеряна. Нужно ли менять это?