【发布时间】:2009-08-05 06:27:35
【问题描述】:
我正在使用 Moq 进行单元测试。为了使 Moq 工作,必须将属性和方法标记为虚拟。有时我在构造函数中传入数据并设置属性值。是否有一条规则是您不应该在构造函数中设置虚拟属性,因为它可能会导致意外行为(如果该类已从基类继承)或者这样做是否安全?
【问题讨论】:
标签: unit-testing moq
我正在使用 Moq 进行单元测试。为了使 Moq 工作,必须将属性和方法标记为虚拟。有时我在构造函数中传入数据并设置属性值。是否有一条规则是您不应该在构造函数中设置虚拟属性,因为它可能会导致意外行为(如果该类已从基类继承)或者这样做是否安全?
【问题讨论】:
标签: unit-testing moq
确实有问题,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
}
}
【讨论】: