单元测试与基类交互的方法

时间:2012-12-12 17:29:45

标签: .net unit-testing inheritance rhino-mocks

似乎有三种一般模式可用于测试派生类与其基础 1 的交互方式。由于我在下面列出的原因,我真的不喜欢它们中的任何一个。有没有人用这些(或另一种)方法中的一种来测试基类交互?

  • Change the access modifiers允许Friend(C#中的internal)访问并设置InternalsVisibleTo以包含模拟框架/单元测试程序集

更改SUT以允许测试是测试气味。如果方法是Protected,那就是Protected,因为这是适当的设计(我实际上还没有看到我称之为“有效”使用Protected Friend({{1} }))。

这需要大量额外的工作来模拟单个方法,它不是完全类型安全的(例如重命名会杀死它),并且(至少在VB中)需要创建protected internal来放置方法in,这是一个设计噩梦(模块不能进入类内部,所以它们需要Module最受限制,而且泛型更复杂)!

  • 使用状态测试代替行为测试。

根据基类的复杂程度,这可能需要很多更多的测试,而不是单个行为测试。考虑状态测试中需要哪些内容来匹配Friend,其中Me.AssertWasCalled(Function(s) s.SendMessage(messageText, [to]))是基类SendMessage方法。

1 注意:在Moq中,这不是必需的,它支持通过方法的Protected名称模拟受保护的方法。正如Ayende在上面的链接中提到的,他特别避免了在Rhino Mocks中的任何非编译时类型安全模拟(我认为这是一件好事!)

1 个答案:

答案 0 :(得分:4)

我的拙见。

通常,测试与基类的交互并不是一个好主意。您将在此处测试实施细节

如果使用基类测试继承类togehter似乎很复杂,那么重构和使用聚合而不是继承可能是时候了吗?