似乎是用于测试派生类与它的底座1的交互方式三个基本模式。 我真的不喜欢任何人的,理由我在下面列出。 有没有人有这些(或其他)方法检测基地课堂互动一个长期的成功?
- 改变访问修饰符以允许
Friend
(internal
在C#)访问,并设置InternalsVisibleTo
以包括模拟框架/单元测试组件
改变SUT以便进行测试是测试气味 。 如果该方法是Protected
,它是Protected
,因为这是它相应的设计(其实我还没有看到我所说的“有效”使用Protected Friend
( protected internal
))。
- 使用反射和扩展方法创建要嘲笑方法的访问版本...然后嘲笑它
这需要很多额外的工作来模拟一个方法,它不完全类型安全(如重命名会杀了它),(至少在VB),需要创建一个Module
把方法中,这是一个设计的噩梦(模块不能往里走班,所以他们需要Friend
在最受限制的,而你仿制药比较复杂)!
- 使用状态检测,而不是行为测试。
根据基类的复杂程度,这可能需要大量的多单的行为测试同样的事情更多的测试。 考虑的会是什么状态测试需要匹配Me.AssertWasCalled(Function(s) s.SendMessage(messageText, [to]))
其中SendMessage
是一个基类Protected
方法。
1注意:这是没有必要在Moq的它支持经由嘲笑保护方法String
的方法的名称。 随着Ayende在上面的链接提到,他特别避免犀牛嘲笑任何非编译时类型安全的嘲讽(我认为这是一件好事!)