Это отчасти продолжение этого вопроса .
Я не уверен, что это лучший способ задать этот вопрос, поэтому я попробую небольшой рассказ, чтобы установить сцену:
Когда-то существовал класс «А», у которого был класс модульного тестирования «ATests», отвечающий за тестирование его поведения через открытый интерфейс.Некоторое время они жили счастливо вместе, а затем произошло изменение, и появился класс «В», который, как оказалось, имел много общего с классом «А», поэтому был введен базовый класс.
Публичное поведение базового класса уже охвачено тестами для класса A. Итак, вопрос в том, что будет дальше?
• Нужно ли классу B иметь тесты для общего (поведение базового класса)?Кажется, что поведение является частью B, поэтому его следует протестировать, но должны ли эти тесты использоваться совместно с тестами для класса A?Для базового класса?Если да, какой лучший способ поделиться?
• Нужны ли модульные тесты новому базовому классу, или это нормально для базовых классов, которые будут проверены с помощью тестов их детей?Имеет ли значение, является ли базовый класс абстрактным?
• Достаточно ли того, чтобы классы A и B были производными от базового класса и «доверяли» модульным тестам базового класса для проверки общего поведения (тактесты не должны быть воспроизведены в дочерних классах)?Тесты для A & B должны только проверять их новое / измененное поведение?
• Я придерживаюсь абсолютно неправильного подхода, имея приблизительно один класс модульных тестов на реальный класс?
I 'Мы придерживались разных взглядов в разное время, и разные подходы могут оказать существенное влияние на возможность рефакторинга кода, время, затрачиваемое на написание тестов и т. д. Какие подходы, по мнению людей, работают лучше всего?