Как вызвать оригинальный метод, который включает в себя вызов ложного метода?

Я использую MS Fakes.

Дайте следующий класс:

public class Person
{
    public void SaveQuotes()
    {
        DoSomething();
    }

    private void DoSomething()
    {
        Console.WriteLine("Original DoSomething called.");
    }
}

и этот тест:

[TestMethod]
public void TestMethod1()
{
    using (ShimsContext.Create())
    {
        var sut = new ShimPerson();

        sut.DoSomething = () => { Console.WriteLine("Called from test"); };

        sut.Instance.SaveQuotes();
    }
}

Когда я запускаю тест, sut.Instance.SaveQuotes() Метод в основном пропущен, так как этот метод был отброшен. Что я хочу, это выполнить оригинал SaveQuotes() метод. Итак, я попробовал это:

[TestMethod]
public void TestMethod1()
{
    using (ShimsContext.Create())
    {
        var sut = new ShimPerson();

        sut.DoSomething = () => { Console.WriteLine("Called from test"); };
        sut.SaveQuotes = () => { ShimsContext.ExecuteWithoutShims(() => sut.Instance.SaveQuotes()); };

        sut.Instance.SaveQuotes();
    }
}

Когда я запускаю тест сейчас, он выполняет оригинальный SaveQuotes(), но в качестве побочного эффекта он также запускает оригинал DoSomething() метод тоже.

Как я могу запустить оригинал SaveQuotes() но фальшивый DoSomething(), TypeMock сделает это .CallOriginal вариант при настройке подделок, но я не вижу, как сделать то же самое в MS Fakes.

1 ответ

Решение

Хорошо, я понял это сейчас.

Я должен был изменить ShimBehaviors.InstanceBeahviour свойство вроде так:

[TestMethod]
public void TestMethod1()
{
    using (ShimsContext.Create())
    {
        var sutShim = new ShimPerson();

        sutShim.DoSomething = () => { Console.WriteLine("Called from test"); };

        sutShim.InstanceBehavior = ShimBehaviors.Fallthrough;

        sutShim.Instance.SaveQuotes();
    }
}

Это говорит подделкам называть оригинал SaveQuotes() метод, в то время как по-прежнему используется DoSomething() метод. Я нашел это, чтобы быть хорошей ссылкой:

http://www.codewrecks.com/blog/index.php/2012/05/10/shim-and-instancebehavior-fallthrough-to-isolate-part-of-the-sut/

Другие вопросы по тегам