Что касается модульного тестирования, мне учили, что в производственном коде не должно быть кода, связанного с тестированием.Являются ли отдельные интерфейсы реализации для модульного тестирования антипаттерна?
Ну, я чувствую, что нарушаю это правило каждый раз, когда я пытаюсь выполнить единичный тест.
У меня есть класс для сборки, Xyzzy
. Я хочу, чтобы зависимость вводила его в другой класс, а затем заглушала его, чтобы я мог проверить, что другой класс изолирован, поэтому я создаю интерфейс, IXyzzy
. К сожалению, теперь у меня есть код в производстве, который действительно существует только для теста. Хуже того, я немного ушел против того, что такое интерфейс (описывает, что разработчик может сделать, а не то, что он -). Открытый интерфейс Xyzzy и IXyzzy - это точно то же самое, и никто другой (кроме заглушек) не реализует IXyzzy.
Это кажется мне плохой.
я мог бы создать абстрактный базовый класс или сделать все открытые методы, которые я хочу, чтобы проверить на XYZZY Overridable
/virtual
, но чувствует себя тоже неправильно, поскольку XYZZY не предназначен для наследования и с точки зрения YAGNI, не будет никогда унаследовать от.
Создает интерфейсы с одним исполнителем исключительно для целей тестирования анти-шаблона? Есть ли лучшие альтернативы?
Очень верно, много моих интерфейсов, например. 'IRequestor', опишите, что он делает;) –