切换callbase时mock的对象方法之间的区别

时间:2016-03-07 15:53:28

标签: c# .net visual-studio nunit moq

我有一个模拟对象:

NULL

AClass看起来像这样:

var mockA = new Mock<AClass>();

之间会有什么区别
public class AClass()
{
  public void someMethod()
  {
    //dostuff
  }
}

,这个?

mockA.CallBase = false;
mockA.Object.someMethod();

1 个答案:

答案 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());