Это довольно специфический сценарий, но у меня проблемы с этим. В моем текущем проекте я впервые применяю все, что считаю хорошей практикой; таким образом, есть MVC / MVP для пользовательского интерфейса, DDD Onion Architecture в ядре, IoC, все в настоящее время тестируется на единицу / интеграцию. Но учтите следующее: когда в моем контроллере вспыхивает исключение, я хочу показать это пользователю в специальной форме, поэтому для модульного тестирования одним из способов будет, конечно, заставить мой контроллер другой просмотреть зависимость через конструктор (громоздкий для каждого контроллера), поэтому у меня есть глобальное хранилище экрана, где я могу позвонить:
ScreenRepository.Instance().ShowExceptionView(...)
Проблема в том, что вы не можете издеваться над синглетонами, но здесь я бы сказал, что они в каком-то смысле чистые.
Чего мне не хватает, так это архитектурной концепции того, как бы вы организовали свой код для решения этой проблемы. Я могу еще раз перефразировать вопрос, чтобы прояснить: как провести модульное тестирование, а путем модульного тестирования как настроить архитектуру для этого? (Я твердо верю, что модульное тестирование приводит мою архитектуру к лучшему дизайну, поэтому, пожалуйста, никаких комментариев, таких как , не позволяйте тестам управлять вашим кодом или чем-то ...
Что теперь делает мой IoC: подключение контроллеров и представлений, репозитории и тому подобное, так что я могу сказать, что у меня есть центральное место для вызова IoC.Resolve<ISomeController>().
Редактировать: я не использую фальшивые фреймворки, которые могли бы ожидать вызова не-виртуальных неинтерфейсных методов ...