Что такое шаблон скромного объекта и когда он полезен?
Я читал статья Дино Эспозито о том, как тестировать AsyncConrollers в ASP.NET MVC и там он использует шаблон "скромный объект", не вдаваясь в подробности.
Мне тоже не очень повезло с Гуглом.
Итак, что такое скромный шаблон объекта? Когда это будет полезно?
2 ответов
здесь подробное описание на xunitpatterns.com.
в принципе, вы вытаскиваете всю логику в отдельный объект, который вы можете легко проверить, и ваш "скромный объект" становится оберткой вокруг вашего тестируемого объекта; просто у скромного объекта также есть зависимости от вещей, которые трудно проверить, например, асинхронные службы или классы GUI. Идея состоит в том, чтобы оставить так мало фактической логики в скромном объекте, что вам не нужно его проверять, и поэтому не нужно иметь дело с тестированием сложной для тестирования зависимости.
обычно я бы реализовал этот вид этого как 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, а не от конкретного представления, что позволяет мне заменять пользовательские взаимодействия заглушкой для тестирования.