Moq和虚拟属性和方法

pac*_*oza 4 unit-testing moq

我正在使用Moq进行单元测试.它命令Moq工作,属性和方法必须标记为虚拟.有时我传入数据并在构造函数中设置属性值.是不是有一个规则,你不应该在constrcutors中设置虚拟属性,因为它可能会导致意外的行为(如果该类已从基类继承)或是否可以安全地执行它?

Mar*_*ann 6

这确实是一个问题,Visual Studio Code Analysis明确地检查了这一点.

一个简单的解决方法是将工作移动到非虚拟内部成员,然后调用虚拟方法,以及构造函数.像这样的东西:

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

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

    internal void DoStuffInternal()
    {
        // Interesting stuff happens here
    }
}
Run Code Online (Sandbox Code Playgroud)