У меня есть базовый класс с достаточным количеством «метапрограммирования», чтобы придать ему гибкость / абстракцию, которая должна быть достаточно общей.
У меня есть много подклассов, использующих общие методы базового класса, и у меня есть ориентированные на поведение модульные тесты, охватывающие все случаи в каждом подклассе.
Можно ли пропустить тестирование базового класса?
unit-testing
testing
Натан
источник
источник
Ответы:
Чтобы проверить, достаточно ли у вас тестов или нет, вы можете проверить покрытие кода и покрытие ветви, вызванное тестами (возможно, с помощью инструмента покрытия, возможно вручную, путем просмотра путей кода или с помощью отладчика).
Если вы придете к выводу, что тесты для подклассов обеспечивают достаточно высокий охват кода базовых классов, то добавление дополнительных тестов, очевидно, не принесет вам большой пользы. С другой стороны, если есть пути кода, которые вы можете протестировать, только добавив конкретные тесты, используя базовый класс напрямую, то вам следует пойти по этому пути.
Другая возможная причина для «тестирования вашего базового класса напрямую» заключается в том, что вы хотите протестировать определенную функцию этого класса «в изоляции». Иногда бывает проще спроектировать тестовые случаи непосредственно для конкретного метода, а не только косвенно тестировать этот метод, вызывая методы ваших подклассов, которые используют этот метод.
Обратите внимание, что если у вас есть базовый базовый класс, для которого типичный сценарий использования состоит в получении подкласса, ваш базовый класс, вероятно, является абстрактным. Так что для тестирования такого класса вам все равно нужно сделать вывод. В этой ситуации тестирование «непосредственно базового класса» может означать, конечно, добавление специального деривации только для целей тестирования.
источник
У нас есть тесты, чтобы сделать нас более продуктивными и уменьшить количество «проблем», на которые жалуются клиенты.
Таким образом, учитывая, что у вас есть ориентированные на поведение модульные тесты, охватывающие все случаи в каждом подклассе, заказчику, который также тестирует базовый класс, нет никакой пользы. Это можно подтвердить , изменив некоторый код в базовом классе и посмотрев, провалился ли тест, например, выровнял ли строку кода или добавив «not» к «if if». (Просто проверить, что каждая строка кода покрыта тестами, недостаточно.)
Затем нам остается спросить, сделает ли этот тест вас более продуктивным . Это может произойти несколькими способами.
Итак, учитывая, что подклассы работают, я не вижу смысла в написании прямых тестов для базового класса. Это не сегодня, что не было бы пользы от написания этих тестов на раннем этапе.
источник