似乎有三种一般模式可用于测试派生类与其基础 1 的交互方式。由于我在下面列出的原因,我真的不喜欢它们中的任何一个。有没有人用这些(或另一种)方法中的一种来测试基类交互?
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中的任何非编译时类型安全模拟(我认为这是一件好事!)
答案 0 :(得分:4)
我的拙见。
通常,测试与基类的交互并不是一个好主意。您将在此处测试实施细节。
如果使用基类测试继承类togehter似乎很复杂,那么重构和使用聚合而不是继承可能是时候了吗?