Я работаю над проектом, в котором много внешних сервисных сообщений. Хороший способ описать его лишь слегка «гиперболическим» способом - это приложение, в котором система должна отправлять сообщения в API Flicker, API Facebook и Netflix.
Для поддержки отключенных сценариев, проблем с ведением журнала, юзабилити разработчиков, конфигурацией и т. Д. Я экспериментировал с подходом, который интенсивно использует дженерики и деревья выражений. Конечный результат выглядит так:
Messenger<NetflixApi>.SendCustom( netflix => netflix.RecommendMovie("my message"));
В целом я доволен конечным результатом, но чувствую, что допустил ошибку или пропустил принцип разработки где-то в отношении тестирования и отключенных сценариев.
Во время тестирования, будь то автоматизированное, модульное или человеческое, я реализовал фабрику объектов, которая первоначально использовала DI для выполнения правильного действия в «Живом режиме», и использовала Mocks для обеспечения своего рода стерильного мессенджера, который не делать что-либо вообще в режиме тестирования.
Я видел или читал только о том, что Mocks используются в режиме чистого TDD, а не используются как некий тупой объект. Подходы, которые я видел, вращались вокруг заглушения или насмешки над функциональностью HTTP-связи, от которой зависят все используемые мной API.
Моя главная проблема заключается в том, что все различные службы, к которым я собираюсь подключиться, в конечном итоге должны будут выполнить большую детальную работу, заменяя конкретную реализацию HTTP, и если бы я использовал подход-заглушку, у меня было бы 3 класса для каждого этих сервисов (IService, ConcreteService, StubService) и их обслуживание при реализации нового метода или изменении чего-либо было бы настоящей PITA.
В текущей реализации я использую Mocks, чтобы получить «стерильный режим» бесплатно почти без необходимости реализовывать что-то дополнительное, просто чтобы соответствовать определенному принципу тестирования.
Вопрос в том, что я что-то упустил? Я нарушил принцип дизайна, используя Mocks более ... удобным способом?
Кто-нибудь может дать какой-нибудь совет о том, как вывести стерильный режим из множества различных внешних служб, не перепрыгивая через множество обручей?
Имеет ли этот вопрос смысл?
Спасибо за все ответы.
Редактировать # 1:
Мне не ясно в моем первоначальном вопросе. Любые нулевые или фиктивные объекты должны использоваться исключительно в среде разработки / отладки / тестирования. В производстве код, отправляющий эти сообщения, будет их фактической реализацией.
Я проголосовал за всех, потому что, похоже, есть много разных решений этой проблемы, и я буду изучать каждый из них.
Пожалуйста, не думайте, что на этот вопрос уже дан ответ, я буду признателен за столько советов, сколько смогу получить.