【问题标题】:How do I mock base class function calls using MOQ?如何使用 MOQ 模拟基类函数调用?
【发布时间】:2017-10-31 07:34:47
【问题描述】:

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

在上面的 sn-p 中,我想为 MyClass 编写单元测试,并且我应该能够使用 MoQ 模拟 obj.MakeCall(); 方法调用。

注意:MOQ 是唯一允许我使用的模拟框架

【问题讨论】:

    标签: c# unit-testing moq mstest


    【解决方案1】:

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

    如果您的基类不是您无法以任何方式触及的遗留代码,我建议您添加一个接口并直接模拟它。

    否则,请参阅以下关于直接使用 IL 并可以模拟密封类的 Moq 替代方案的答案:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-11
      • 2014-06-03
      • 2011-01-28
      • 2011-02-27
      • 2015-04-04
      • 1970-01-01
      • 2011-10-22
      • 2011-03-17
      相关资源
      最近更新 更多