Один из подходов, который вы можете использовать, - это организовать тестовые блоки, чтобы вы могли повторно использовать тестовый код. Таким образом, вам не нужно копировать / вставлять вещи (копирование / вставка, даже если это для тестов, обычно не то, что вы хотите делать).
Или (что я делаю), вы можете просто протестировать один из ваших подклассов. Я знаю, я знаю, это означает, что если вы решите, что один из ваших «частично покрытых» подклассов должен использовать другой базовый класс, или если то поведение, которое вы тестировали, в конечном итоге «переходит» в подклассы, у вас будет непокрытый код.
Однако такого рода вещи случаются редко. Обычно при рефакторинге вы отправляете код в суперклассы (чтобы исключить дублирование кода). Когда вы делаете такой рефакторинг, вы не теряете покрытие из-за того, что только один из ваших подклассов проверен на поведение его суперкласса.
Следовательно, я считаю, что обычно можно протестировать только один из ваших подклассов, чтобы протестировать поведение суперкласса.