如何使用MOQ模拟基类函数调用?

时间:2017-10-31 07:34:48

标签: c# unit-testing moq mstest

在下面给出的场景中,我添加了对someExternal.Library.dll的引用,并从MyClass派生了一个名为BaseClass的类。 MyClass在其方法内部调用MakeCall() BaseClass方法。这里,BaseClass是一个没有实现任何接口的具体类,MakeCall()方法也是非虚方法。

在这种情况下,如何仅模拟基类的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是我唯一允许使用的模拟框架

1 个答案:

答案 0 :(得分:1)

由于您的基本方法既没有实现任何接口也没有标记为虚拟,因此Moq无法在该特定方案中为您提供帮助,因为它会生成一个代理来实现接口或创建一个派生类来按顺序覆盖方法拦截电话。

如果您的基类不是遗留代码,您无法通过任何方式触摸,我建议您添加一个界面并直接进行模拟。

否则,请参阅以下答案,了解与IL直接相关的Moq替代方案,并且可以模拟密封类:

https://stackoverflow.com/a/21793891/3400897

相关问题