代码之家  ›  专栏  ›  技术社区  ›  Matt Brunell

如何使用nmock2模拟内部接口?

  •  0
  • Matt Brunell  · 技术社区  · 14 年前

    如果我尝试这个,我会得到一个例外:

    System.TypeLoadException : Access is denied: 'Namespace.IInternalInterface'.
    

    将接口公开是不可接受的解决方案。我不想为了测试而更改API的可见性。

    2 回复  |  直到 11 年前
        1
  •  3
  •   Rhyous    11 年前

    找到并记录解决方案。

    http://www.rhyous.com/2012/05/03/nmock2-internal-interface/

    结果发现nmock2的新版本(我在这里找到它: NMock2 Project )只需要一个,它是不同的。

    [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
    
        2
  •  2
  •   Matt Brunell    14 年前

    我找到了答案:

    nmock2(和其他模拟框架)。将在动态生成的程序集中创建模拟对象。为了让模拟框架创建模拟对象,内部构件应该对这些组件可见。

    只需将以下声明添加到被测试模块的assemblyinfo.cs类中:

    // Allow unit test and mock assemblies to see internal members.
    [assembly: InternalsVisibleTo("MyAssembly.UnitTest")]
    [assembly: InternalsVisibleTo("NMock2")]
    [assembly: InternalsVisibleTo("Mocks")]
    [assembly: InternalsVisibleTo("MockObjects")]