В интересах полного раскрытия информации: Я не эксперт по TDD (на самом деле я им не пользуюсь и никогда не пользуюсь), но я думаю, что могу поспорить из-за моего невежества в отношении сторонников TDD в этом случае.
Представьте себе ситуацию, когда у вас есть простое свойство / функция "нулевой логики", как во втором примере.Предположим, вы реализовали свою собственную версию GetProcessById
, которая функционирует немного иначе, но взаимозаменяема с объектом Process
.Вы решаете не писать тест для этой функции и говорите: «Ах, я просто делегирую ее в хорошо протестированную библиотеку, я не могу ее испортить».Там твоя первая ошибка.«Я не могу все испортить» - единственная наихудшая ложь, которую программисты когда-либо регулярно говорят себе.
Предположим, через шесть месяцев вы поймете, что вам нужно расширить Process
дополнительными вещами.Вы делегируете все правильные методы и переопределяете GetProcessById
.Теперь вы официально должны проверить этот метод "нулевой логики".И это беда.Полиморфизм и многие другие особенности языков программирования (даже те, которые не являются строго объектно-ориентированными) приводят к коду, который не выполняет точно того, что вы себе представляете.
Итак, чтоПри этом, если вы придерживаетесь строгой методологии TDD, и вы стремитесь к 100% охвату тестами, вам нужно протестировать «нулевые логические» методы, как и эти два.
ЕдинственноеИсключение, которое я могу себе представить, относится только к .NET, и это автоматически реализуемые свойства, в которых нет смысла проверять правильность работы Getter и Setter, потому что даже если бы они этого не делали, вы ничего не могли бы с этим поделать.Протестируйте объект, обернутый в свойстве, а не само свойство.
Ребята из TDD, достаточно ли это суммируется?