我们使用Moq作为我们的模拟框架,问题是需要可模拟的类型是使用接口完成的,问题是该接口中的任何内容都是公共的,因此被视为我们的公共API的一部分。
有没有办法让一个成员可以模仿而不公开?
答案 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
方法而不是整个界面和/或基础界面可怜的一点?或者只是有一个特定的界面。请记住,如果很难进行模拟或测试,那么通常可以在代码中改进一些东西(而不是寻找跳过篮球和/或使用过于强大的模拟框架的技术技巧)。
另外,我敢打赌,如果你发布一个精简版的测试,有人能够正确地重构它,我们都会学到一些东西。