的单元测试方法相互作用与碱类(Approach to unit testing interactio

2019-08-03 23:59发布

似乎是用于测试派生类与它的底座1的交互方式三个基本模式。 我真的不喜欢任何人的,理由我在下面列出。 有没有人有这些(或其他)方法检测基地课堂互动一个长期的成功?

  • 改变访问修饰符以允许Friendinternal在C#)访问,并设置InternalsVisibleTo以包括模拟框架/单元测试组件

改变SUT以便进行测试是测试气味 。 如果该方法是Protected ,它是Protected ,因为这是它相应的设计(其实我还没有看到我所说的“有效”使用Protected Friendprotected internal ))。

  • 使用反射和扩展方法创建要嘲笑方法的访问版本...然后嘲笑它

这需要很多额外的工作来模拟一个方法,它不完全类型安全(如重命名会杀了它),(至少在VB),需要创建一个Module把方法中,这是一个设计的噩梦(模块不能往里走班,所以他们需要Friend在最受限制的,而你仿制药比较复杂)!

  • 使用状态检测,而不是行为测试。

根据基类的复杂程度,这可能需要大量的多单的行为测试同样的事情更多的测试。 考虑的会是什么状态测试需要匹配Me.AssertWasCalled(Function(s) s.SendMessage(messageText, [to]))其中SendMessage是一个基类Protected方法。

1注意:这是没有必要在Moq的它支持经由嘲笑保护方法String的方法的名称。 随着Ayende在上面的链接提到,他特别避免犀牛嘲笑任何非编译时类型安全的嘲讽(我认为这是一件好事!)

Answer 1:

只是我的拙见。

Generaly它不是测试与基类的交互是一个好主意。 当你要在这里测试的实施细节

如果测试继承类togehter与基类看起来是复杂那么它可能是一次重构和使用聚合而不是继承?



文章来源: Approach to unit testing interaction with a base class