如果我有一个模拟对象:
var mock = new Mock<myClass>();
mock
的基类是什么?
我的问题的原因是因为我正在调试以下内容:
var mock = new Mock<myClass>();
mock.Object.someMethod(); //stepping through this line by line, it does not set focus to **myClass**
但是,当我将CallBase设置为true时,我确实看到编译器正在运行 myClass 中的代码:
var mock = new Mock<myClass>();
mock.CallBase = true;
mock.Object.someMethod();
这是否意味着模拟的基类是它正在模拟的类?
答案 0 :(得分:1)
不,这并不意味着,mock.CallBase = true;
告诉 Moq 直接使用该类型的实例。的 Moq.CallBase 即可。
它实现了类似于通用参数中类型的 Proxy-Pattern ,但您可以存根 virtual
方法(存在一些非虚拟方法的存在变通方法,例如,如果你在泛型参数中传递interface
,你可以存根所有方法和属性,但是如果你通过了仅具体类virtual
方法,您可以存根返回。
答案 1 :(得分:1)
它的作用实际上是使用类的默认构造函数创建类的实例,然后在反射中覆盖类的公共虚方法。
方法的默认行为是什么都不做。
当你说mock.Callbase = true
它告诉模拟器,如果你没有提供任何设置功能,它应该使用其模拟类型的方法。
您可以将其视为模拟从您的类派生并覆盖方法,如果您设置mock.Callbase = true
则调用base.someMethod()
。但实际上它不是,这意味着你的班级演员会失败,因为它是在反思中做的
希望我自己解释
答案 2 :(得分:0)
它根本不一定有基类。
当您输入所拥有的代码时,您将为 myClass
的具体类型创建类Mock的实例class myClass<T>
{
private T _Instance;
public myClass(T instance){
_Instance = instance;
}
如上例所示,&#34; myClass&#34;
没有baseClass