2010-06-24 29 views
4

我们使用Moq作为我们的模拟框架,问题在于需要使用接口完成可模拟的类型,问题在于该接口中的任何内容都是公开的,因此我们认为这是公共API。如何编写内部可模拟方法

有没有办法必须有一个可以嘲笑而不公开的成员?

回答

3

如果我已经正确地理解了你,你希望能够将一个接口应用到一个类型来支持嘲讽,但这样做的方式是该接口不会被你的代码的公共消费者看到。

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

[assembly:InternalsVisibleTo("MyUnitTestAssembly")] 

internal interface ISomeInterfaceForMocking { ... } 

public class MyMockableType : ISomeInterfaceForMocking { ... } 
+0

这有效,但在这种情况下,所有的成员将是内部的,有没有办法对它有更多的控制权? – 2010-06-24 21:54:19

+0

@Keivan - 你究竟是什么意思,通过更多的控制?您唯一的其他选择是使成员'内部保护',这将允许派生类访问它们。 – LBushkin 2010-06-24 22:20:42

0

http://code.google.com/p/moq/wiki/QuickStart#miscellaneous(见其他部分)的任何使用(即语法嘲讽protected东西)?

ISP说只有一些人感兴趣的界面上不应该有神奇的东西。还有,你认为坚持使用单一的方法而不是整个界面和/或可模拟位的基础界面?或者只是有一个特定的接口。请记住,如果很难模拟或测试,通常可以在代码中改进一些东西(而不是寻找技术窍门来跳转和/或过度强大的嘲笑框架)。

另外,我敢打赌,如果你发布一个减肥版的测试,有人可以重构它恰到好处,我们都会学到一些东西。

相关问题