Что такое шаблон скромного объекта и когда он полезен?

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