Что такое шаблон Humble Object и когда он полезен? - PullRequest
16 голосов
/ 16 марта 2011

Я читал статью Дино Эспозито о том, как тестировать AsyncConrollers в ASP.NET MVC , и там он использует шаблон "Humble Object", не вдаваясь в детали.* Мне тоже не повезло, гуглить вокруг.

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

Ответы [ 2 ]

32 голосов
/ 16 марта 2011

Существует подробное описание на xunitpatterns.com .

По сути, вы тянете всю логику в отдельный объект, который вы можете легко проверить - и ваш "смиренный объект" становитсяобертка вокруг вашего тестируемого объекта;просто скромный объект также имеет зависимости от вещей, которые сложно тестировать, таких как асинхронные сервисы или классы GUI.Идея состоит в том, чтобы оставить так мало фактической логики в скромном объекте, что вам не нужно тестировать его, и поэтому вам не нужно заниматься тестированием сложной для тестирования зависимости.

5 голосов
/ 16 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...