Цитируя ваши вопросы и комментарии,
Насколько я понимаю, модульные тесты предполагают, что классы и их методы являются черными ящиками, и проверяют свои контракты.
И
Поскольку контракты для метода someMethod одинаковы для обоих классов, мне нужны в основном одни и те же тестовые методы (в отношении метода someMethod) для обоих классов, что приводит к дублированию кода.
Оба являются неправильными предположениями в контексте общих концепций модульных тестов и могут быть правильными предположениями в очень узком контексте TDD .Вы не пометили свой вопрос для TDD, поэтому я просто предполагаю, что и TDD - это то, что является приемлемым и не обязательно очень надежным с точки зрения кода.
TDD никогда не мешает разработчику писать более всесторонние модульные тесты, которые удовлетворяют его / ее, а не только контракт.
Вы должны понимать, что модульные тесты - это инструмент разработчика, который гарантирует точность метода, и он не принимает методы в качестве черных ящиков - он должен тестировать контракт, а также детали реализации (покрытие кода).Разработчик не должен писать модульные тесты вслепую, как для тривиальных методов (например, методов установки / получения)
Если вы подробно расскажете о покрытии кода, то обнаружите, что вам придется написать несколько методов тестирования для целевого метода, охватывающего все сценарии.
Если реализация метода ниже не изменяется в классе - EnhancedFoo
, зачем писать для него модульные тесты?Следует предположить, что тесты родительского класса будут охватывать его.
protected void someMethod(Bar bar) {
...
}
Вы пишете модульные тесты для методов, которые вы изменяете или добавляете и не должны беспокоиться об иерархии наследования.
Я просто пытаюсь подчеркнуть важность слова unit :)