代码之家  ›  专栏  ›  技术社区  ›  kay.one

如何编写内部模拟方法

  •  4
  • kay.one  · 技术社区  · 15 年前

    我们正在使用moq作为模拟框架,问题是需要模拟的类型是使用接口完成的,该接口中的任何内容都是公共的,因此被视为公共API的一部分。

    有没有一种方法必须有一个成员是可模仿的,而不是公开的?

    2 回复  |  直到 15 年前
        1
  •  3
  •   LBushkin    15 年前

    如果我已经正确理解了您的意思,那么您希望能够将接口应用于支持模拟的类型,但这样做的方式是,您的代码的公共使用者将看不到该接口。

    好吧,一种选择是您可以实现 internal 接口和使用 [assembly:InternalsVisibleToAttribute] 使单元测试可以访问内部类型。

    [assembly:InternalsVisibleTo("MyUnitTestAssembly")]
    
    internal interface ISomeInterfaceForMocking { ... }
    
    public class MyMockableType : ISomeInterfaceForMocking { ... }
    
        2
  •  0
  •   Ruben Bartelink    15 年前

    http://code.google.com/p/moq/wiki/QuickStart#miscellaneous (见杂项)任何使用(即模仿的语法) protected 东西?

    ISP说,在只有一些人感兴趣的界面上不应该有神奇的东西。另外,你有没有考虑过要穿一件 virtual 方法而不是整个接口和/或可模拟位的基本接口?或者只是有一个特定的接口。记住,如果很难模拟或测试,通常在代码中有一些可以改进的地方(而不是找到跳篮球的技术技巧和/或使用功能强大的模拟框架)。

    另外,我敢打赌,如果你发布了一个精简版的测试,有人会正确地重构它,我们都会学到一些东西。

    推荐文章