我有一个模拟对象:
NULL
AClass看起来像这样:
var mockA = new Mock<AClass>();
之间会有什么区别
public class AClass()
{
public void someMethod()
{
//dostuff
}
}
,这个?
mockA.CallBase = false;
mockA.Object.someMethod();
答案 0 :(得分:4)
您需要更多地扩展您的类以查看CallBase属性的用法。 CallBase属性允许我们通知模拟对象,如果没有期望覆盖成员,我们希望它调用基类实现。例如,你的AClass有一个基类BaseClass
public class BaseClass
{
public virtual string GetStatus
{
get{
return "Ok";
}
}
}
public class AClass():BaseClass
{
public bool someMethod()
{
return GetStatus == "Ok";
}
}
现在,如果你运行了第一次测试
mockA.CallBase = false;
Assert.IsTrue(mockA.Object.someMethod());
这会失败,因为没有调用调用基础并且GetStatus不会被初始化,它只是为空;
现在第二个测试将在CallBase属性为true时传递,GetStatus字符串将初始化为&#34; Ok&#34;。
mockA.CallBase = true;
Assert.IsTrue(mockA.Object.someMethod());