C# Mock的基类是什么?

C# Mock的基类是什么?,c#,unit-testing,nunit,moq,C#,Unit Testing,Nunit,Moq,如果我有一个模拟对象: var mock = new Mock<myClass>(); 但是,当我将CallBase设置为true时,我确实看到编译器正在运行myClass中的代码: var mock = new Mock<myClass>(); mock.CallBase = true; mock.Object.someMethod(); var mock=new mock(); mock.CallBase=true; mock.Object.someMethod(

如果我有一个模拟对象:

var mock = new Mock<myClass>();
但是,当我将CallBase设置为true时,我确实看到编译器正在运行myClass中的代码:

var mock = new Mock<myClass>();
mock.CallBase = true;
mock.Object.someMethod();
var mock=new mock();
mock.CallBase=true;
mock.Object.someMethod();

这是否意味着模拟的基类就是它正在模拟的类?

它不一定有基类

当您键入您拥有的代码时,您正在为具体类型myClass

class myClass<T>
{
  private T _Instance;

  public myClass(T instance){
  _Instance = instance;
}
class-myClass
{
私人T_实例;
公共myClass(T实例){
_实例=实例;
}

在上面的示例中,“myClass”没有基类

不,这并不意味着这一点,因为
mock.CallBase=true;
告诉您要Moq直接使用该类型的实例。


它对泛型参数中的类型实现了类似于的功能,但您只需存根
虚拟
方法(存根某些非虚拟方法的任何现有解决方法),例如,如果您在泛型参数中传递一个
接口
,您可以存根所有方法和属性,但是如果您只传递一个具体类
虚拟
方法,您可以存根返回。

它实际上是使用您的默认构造函数创建类的实例类,然后在反射中重写类的公共虚拟方法

这些方法的默认行为是什么都不做。 当你说
mock.Callbase=true
时,它告诉mock如果你没有提供任何设置函数,它应该使用mock类型的方法

您可以将其视为mock从类派生并重写方法,如果设置
mock.Callbase=true
,它将调用
base.someMethod()
。但实际上并非如此,这意味着对类的转换将失败,因为它是在反射中进行的


希望我解释了我自己

您在测试中尝试使用的接口。谢谢。我不明白这意味着如果没有匹配的设置,是否会为模拟类调用基成员虚拟实现。您什么时候会希望调用基为假???@l--“l”-----“经常,但我经常说存在例外情况n因为在单元测试中,您正在测试单元,并且所有的模拟对象都是依赖项,所以您将测试模拟是否被调用,而不是它们所做的。@l------------------“如果CallBase为true,则任何针对模拟的调用都将调用基类,但没有设置。@lukew谢谢,这动摇了我的全部理解。”模拟测试是什么?你什么时候会希望Callbase为false??
class myClass<T>
{
  private T _Instance;

  public myClass(T instance){
  _Instance = instance;
}