如何编写内部可模拟方法

时间:2010-06-24 20:57:26

标签: .net interface mocking moq

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

有没有办法让一个成员可以模仿而不公开?

2 个答案:

答案 0 :(得分:3)

如果我理解正确,您希望能够将接口应用于类型以支持模拟,但这样做的方式是接口对您的代码的公共使用者不可见。< / em>的

嗯,一个选项是您可以实现internal接口并使用[assembly:InternalsVisibleToAttribute]使单元测试可以访问内部类型。

[assembly:InternalsVisibleTo("MyUnitTestAssembly")]

internal interface ISomeInterfaceForMocking { ... }

public class MyMockableType : ISomeInterfaceForMocking { ... }

答案 1 :(得分:0)

http://code.google.com/p/moq/wiki/QuickStart#miscellaneous(参见杂项部分)是否有用(即模拟protected内容的语法)?

互联网服务提供商表示,在一个只有一些人感兴趣的界面上不应该有神奇的东西。另外,您是否考虑过坚持使用单个virtual方法而不是整个界面和/或基础界面可怜的一点?或者只是有一个特定的界面。请记住,如果很难进行模拟或测试,那么通常可以在代码中改进一些东西(而不是寻找跳过篮球和/或使用过于强大的模拟框架的技术技巧)。

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