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