Как я могу иметь дело с родительским классом self.params, используя pytest? - PullRequest
0 голосов
/ 06 марта 2020

Я новичок 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 потеряна. Нужно ли менять это?

...