【问题标题】:Microsoft Fakes - Stubbing an Extension Method Shouldn't Work But It DoesMicrosoft Fakes - 存根扩展方法不应该工作,但它确实有效
【发布时间】:2016-10-28 09:25:24
【问题描述】:

我有一个接口ILoader,我在上面定义了一个扩展方法CheckLoaderDatabaseConnection

  //the extension method
  public static class LoaderExtensions
  {
    public static void CheckLoaderDatabaseConnection(this ILoader loader)
    {
      //data access stuff

  }

那里的所有文档都告诉我,当我想存根扩展方法时,我必须使用 shims,因为该方法是静态的并且不能存根。

确实,它在 Moq 中不起作用,因为我已经尝试过了。

但我可以在 Fakes 中存根接口:

var loader = new MyNamespace.Fakes.StubILoader() {  };

在我的单元测试中,我将存根传递给我正在测试的具体实例的构造函数,当它到达这一行时:

loader.CheckLoaderDatabaseConnection();

它调用存根方法(什么都不做)并且工作正常。

这是为什么?我肯定错过了什么。我根本不需要在这里使用垫片(虽然我不能在 Moq 中存根 - 当我尝试这样做时,现实世界的扩展被调用并且整个事情都爆炸了)

【问题讨论】:

  • 你是如何存根扩展方法的?从您的示例中,扩展方法只是针对接口的假实现执行,这是允许的。您可能需要为扩展方法的工作提供更多源代码

标签: moq microsoft-fakes stubs


【解决方案1】:

不,扩展方法没有被调用,但是在早些时候从蓝屏死机重新启动后,扩展方法现在被调用并且单元测试失败,正如我所期望的那样。

不过,这几天不明白这是怎么工作的;有点奇怪,我认为这个问题无法回答。

【讨论】:

    猜你喜欢
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2012-11-05
    • 2015-06-16
    • 2011-05-25
    相关资源
    最近更新 更多