Настройка Moq для игнорирования виртуального метода - PullRequest
9 голосов
/ 04 марта 2010

У меня есть абстрактный класс, который имеет виртуальный метод. Метод является виртуальным в том случае, если более поздняя реализация должна переопределить эту функциональность.

Однако Moq проксирует все виртуальные методы, поэтому я не могу проверить реальный написанный код и вместо этого использует настройку Mock для этого метода (который в настоящее время возвращает значение по умолчанию).

Пример резюме:

public abstract SomeAbstract
{
    public abstract Format(IFormatProvider provider, string format)
    {
          // does some stuff i need to test
    }
}

Мой тест NUnit:

[Test]
public void Should_Set_Format_State()
{
   Mock<SomeAbstract> mock = new Mock<SomeAbstract>();
   mock.Object.Format(CultureInfo.CurrentCulture, "format string");

   // do tests to make sure Format correctly changed the object's state
}

Как мне настроить объект Mock, чтобы позволить моему виртуальному Format методу работать без необходимости удалять virtual из метода ?! Возможно, я злоупотребляю концепцией издевательства в этом случае.

1 Ответ

14 голосов
/ 04 марта 2010

Я полагаю, что установка "CallBase = true" на макете будет работать. См. Раздел «Настройка фиктивного поведения» в разделе Быстрый старт

...