Unit testing Moq和虚拟属性及方法

Unit testing Moq和虚拟属性及方法,unit-testing,moq,Unit Testing,Moq,我使用Moq进行单元测试。为了使Moq正常工作,属性和方法必须标记为虚拟。有时我在构造函数中传递数据并设置属性值。您不应该在构造函数中设置虚拟属性,因为这可能会导致意外行为(如果该类是从基类继承的),或者这样做是安全的吗?这确实是一个问题,Visual Studio 一个简单的解决方法是将工作移动到非虚拟内部成员,然后让虚拟方法调用该成员以及构造函数。大概是这样的: public class MyClass { public MyClass() { this.Do

我使用Moq进行单元测试。为了使Moq正常工作,属性和方法必须标记为虚拟。有时我在构造函数中传递数据并设置属性值。您不应该在构造函数中设置虚拟属性,因为这可能会导致意外行为(如果该类是从基类继承的),或者这样做是安全的吗?

这确实是一个问题,Visual Studio

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

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

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

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