Подтвердить что ты не робот

Что такое шаблон Humble Object и когда он полезен?

Я читал статью Дино Эспозито о том, как тестировать AsyncConrollers в ASP.NET MVC, и там он использует "Скромный объект", шаблон, не вдаваясь в подробности.

У меня не было большой удачи, как и Google.

Итак, что такое шаблон Humble Object? Когда это будет полезно?

4b9b3361

Ответ 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, а не конкретное представление, которое позволяет мне заменить взаимодействие пользователя с заглушкой для тестирования.