我正在使用Moq进行单元测试。它命令Moq工作,属性和方法必须标记为虚拟。有时我传入数据并在构造函数中设置属性值。是不是有一个规则,你不应该在constrcutors中设置虚拟属性,因为它可能会导致意外的行为(如果类已从基类继承)或是否安全?
答案 0 :(得分: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
}
}