Тестирование метода в классе, который вызывает переопределенный метод - PullRequest
1 голос
/ 01 июля 2019

Предположим, у меня есть следующие классы:

class A():
    def method1(self, x):
       x = x * 2
       x = self.method2(x)
       return x

    def method2(self, x):
       raise NotImplementedError
class B(A):
    def method2(self, x):
        return x + 5

Если я пишу модульные тесты для класса А, (немного нового в юнит-тестировании)

  1. Как мне проверить method1?
    Так как он вызывает метод, который переопределен в подклассе.

  2. Создание объекта класса A или класса B? (я тестирую A)
    Создание объекта для A приведет к NotImplementedError. Возможным решением будет использование объекта B для тестирования этого метода или, возможно, тестирование этого метода при написании тестов для класса B.

Редактировать : Хотя я не полностью исправлен в дизайне, класс A, скорее всего, не будет создан напрямую.

1 Ответ

4 голосов
/ 01 июля 2019

Я бы не стал полагаться на экземпляр B - вы, вероятно, тоже захотите провести модульное тестирование B, но если вы тестируете A, вам не следует полагаться на логику другого класса.

Вы можете проверить, что при вызове method1 поднимается NotImplementedError, но это хрупко - тест также пройдет, если method1 вызовет эту ошибку напрямую, независимо от method2.

Лучшим подходом может быть создание фиктивного класса, который переопределяет method2 и просто возвращает x как есть, и использовать его для тестирования A.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...