Moq и виртуальные свойства и методы - PullRequest
4 голосов
/ 05 августа 2009

Я использую Moq для модульного тестирования. Для того чтобы Moq работал, свойства и методы должны быть помечены как виртуальные. Иногда я передаю данные и устанавливаю значения свойств в конструкторах. Не существует ли правила, согласно которому вы не должны устанавливать виртуальные свойства в constrcutors, поскольку это может вызвать непредвиденное поведение (если класс был унаследован от базового класса) или это безопасно делать?

1 Ответ

6 голосов
/ 05 августа 2009

Это действительно проблема, и Visual Studio Code Analysis явно проверяет это .

Простой обходной путь для этого состоит в том, чтобы переместить работу в не виртуальный внутренний элемент, а затем вызвать вызов виртуального метода, а также конструктор. Как то так:

public class MyClass
{
    public MyClass()
    {
        this.DoStuffInternal();
    }

    public virtual void DoStuff()
    {
        this.DoStuffInternal();
    }

    internal void DoStuffInternal()
    {
        // Interesting stuff happens here
    }
}
...