【发布时间】:2013-04-09 19:16:40
【问题描述】:
我有一个要模拟的依赖项。
public abstract class MyDependency
{
protected Dictionary<string, object> _outputs = new Dictionary<string, object>();
public Dictionary<string, object> Outputs
{
get
{
return _outputs;
}
}
}
我需要公共属性Outputs 来返回一个已知值以用于我的单元测试。我知道我们不能模拟字段或非虚拟成员。因此,我可以创建自己的模拟 MyDependency 来设置支持字段 _outputs:
public class MockMyDependency : MyDependency
{
public MockMyDependency()
{
_outputs = new Dictionary<string, object>
{
{ "key", "value" }
};
}
}
但是,是否可以在不显式创建自己的派生模拟类的情况下使用 Moq 来执行此操作?
【问题讨论】:
-
SetupGet()是否适用于抽象类? -
@48klocs 是的,但要正确模拟一个属性(或方法),该属性必须标记为
abstract或virtual。不幸的是,我无法修改MyDependency类。 -
建议编辑:标题中的“属性”,而不是字段,因为问题和答案关注。