如何使用最小起订量模拟基础 class 函数调用?
How do I mock base class function calls using MOQ?
在下面给出的场景中,我添加了对 someExternal.Library.dll 的引用,并从 BaseClass
派生了一个名为 MyClass
的 class。 MyClass
在其方法内部调用 BaseClass
的 MakeCall()
方法。这里,BaseClass
是一个具体的 class,它不实现任何接口,MakeCall()
方法也是一个非虚拟方法。
在这种情况下,如何仅模拟基础 class 的 MakeCall()
方法?
我想为 MyClass
编写单元测试
public class MyClass : BaseClass
{
public void DoSomething()
{
//someExternal.Library.dll is referenced to the project
// Makecall() is available to this class through inheritance
MakeCall();
...
}
public bool DoSomethingElse()
{
...
}
}
在上面的代码片段中,我想为 MyClass
编写单元测试,我应该能够使用 MoQ 模拟 obj.MakeCall();
方法调用。
注意:最小起订量是唯一允许我使用的模拟框架
由于您的基方法既未实现任何接口也未标记为虚拟,Moq 无法在该特定情况下为您提供帮助,因为它会生成一个代理来实现该接口或创建一个派生的 class 来覆盖一种拦截调用的方法。
如果你的基础 class 不是你无论如何都不能接触的遗留代码,我建议添加一个接口并直接模拟它。
否则,请参阅以下答案,了解直接与 IL 一起工作并且可以模拟密封的 Moq 替代方案 classes:
在下面给出的场景中,我添加了对 someExternal.Library.dll 的引用,并从 BaseClass
派生了一个名为 MyClass
的 class。 MyClass
在其方法内部调用 BaseClass
的 MakeCall()
方法。这里,BaseClass
是一个具体的 class,它不实现任何接口,MakeCall()
方法也是一个非虚拟方法。
在这种情况下,如何仅模拟基础 class 的 MakeCall()
方法?
我想为 MyClass
public class MyClass : BaseClass
{
public void DoSomething()
{
//someExternal.Library.dll is referenced to the project
// Makecall() is available to this class through inheritance
MakeCall();
...
}
public bool DoSomethingElse()
{
...
}
}
在上面的代码片段中,我想为 MyClass
编写单元测试,我应该能够使用 MoQ 模拟 obj.MakeCall();
方法调用。
注意:最小起订量是唯一允许我使用的模拟框架
由于您的基方法既未实现任何接口也未标记为虚拟,Moq 无法在该特定情况下为您提供帮助,因为它会生成一个代理来实现该接口或创建一个派生的 class 来覆盖一种拦截调用的方法。
如果你的基础 class 不是你无论如何都不能接触的遗留代码,我建议添加一个接口并直接模拟它。
否则,请参阅以下答案,了解直接与 IL 一起工作并且可以模拟密封的 Moq 替代方案 classes: