2009-08-05 91 views
4

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

回答

6

这的确是一个问题,而Visual Studio Code Analysis explicitly checks for this

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

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

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

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