Как провести чистое модульное тестирование пользовательского метода ValueResolver ResolveCore (…)

Я пытаюсь выполнить модульное тестирование настраиваемого ValueResolver (Automapper), но у меня возникают проблемы, потому что метод, который он заставляет меня переопределить, не отображается непосредственно в настраиваемом объекте, который мы должны создать. Я переопределяю защищенный метод «ResolveCore», но единственный открытый открытый метод - «Resolve», который ожидает сложный объект автомаппера «ResolutionResult» в качестве входных данных. В духе настоящего модульного тестирования я хочу протестировать этот объект / метод изолированно от чего-либо еще и на самом деле не хочу идти по пути запуска автомаппера с сопоставлениями для выполнения этого теста. Точно так же невозможно имитировать «ResolutionResult», и это кажется очень сложным объектом для настройки для каждого теста (опять же, требуя создания / ассоциации других объектов Automapper).

Единственное (не идеальное) решение, которое я могу придумать ( и видели предложение при поиске решения в Google) заключается в том, чтобы заглушить общедоступный метод внутри класса, который предоставляет защищенный метод переопределения. Если мы должны пойти по этому пути, пусть будет так, но есть ли у кого-нибудь еще лучшее решение, которое тестирует вызов метода изолированно и не требует модификации объекта, который мы пытаемся протестировать?

Пример кода:

public class CustomResolver : ValueResolver<Supplier, string>
{
    protected override string ResolveCore(Custom source)
    {
        return string.Format("{0} {1}", source.Name, source.Descripton);
    }

    public string UnitTestStub(Custom source)
    {
        return ResolveCore(source);
    }
}
6
задан James Donnelly 28 October 2013 в 11:49
поделиться