Обычно я реализую этот вид как Interface
- тогда вы можете использовать фиктивную инфраструктуру, чтобы заглушить ее для тестирования, и инфраструктуру IoC для внедрения правильной реализации во время выполнения.
Вот пример из моего текущего проекта:
public interface IUserInterface
{
string AskUserWhereToSaveFile(
string title,
FileType defaultFileType,
string defaultFileName = null,
params FileType[] otherOptions
);
string AskUserToSelectFileToLoad(
string title,
FileType defaultFileType,
params FileType[] fileTypes
);
void ShowError(string title, string details);
bool AskUserIfTheyWantToRetryAfter(string errorMessage);
}
Мой контроллер затем зависит от IUserInterface, а не от конкретного представления, что позволяет мне заменять пользовательские взаимодействия заглушкой для тестирования.