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

发布于 2024-09-13 08:45:32 字数 176 浏览 11 评论 0原文

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

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

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

If I try this, I just get an exception:

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

Making the interface public is not an acceptable solution. I don't want to change the visiblity of my API in order to test it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

禾厶谷欠 2024-09-20 08:45:32

找到并记录了解决方案。

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

原来是 NMock2 的较新版本(我在这里得到的: NMock2 项目)只需要一个,而且它是不同的。

[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]

Found and documented the solution.

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

Turns out that the newer version of NMock2 (I got it here: NMock2 Project) only needs one and it is different.

[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
木森分化 2024-09-20 08:45:32

我找到了答案:

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")]

I found the answer to this:

NMock2, (and other mocking frameworks). Will create the mock objects in dynamically generated assemblies. In order for the mocking framework to create the mock object, the internals should be visible to these assemblies.

Just add the following declarations to the AssemblyInfo.cs class for the Module Under Test:

// Allow unit test and mock assemblies to see internal members.
[assembly: InternalsVisibleTo("MyAssembly.UnitTest")]
[assembly: InternalsVisibleTo("NMock2")]
[assembly: InternalsVisibleTo("Mocks")]
[assembly: InternalsVisibleTo("MockObjects")]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文