如何使用最小起订量模拟基础 class 函数调用?

How do I mock base class function calls using MOQ?

在下面给出的场景中,我添加了对 someExternal.Library.dll 的引用,并从 BaseClass 派生了一个名为 MyClass 的 class。 MyClass 在其方法内部调用 BaseClassMakeCall() 方法。这里,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: