当您使用合成时,您可以模拟测试中的类所依赖的其他对象,但是当您使用继承时,您无法模拟基类.(或者你呢?)
我通常试图更喜欢组合而不是继承,但有时候继承似乎是最好的工具 - 好吧,至少在单元测试之前.
那么,你如何测试继承?或者你只是把它作为不可测试的废物并使用组合而不是?
注意:我主要使用PHP和PHPUnit,因此非常感谢帮助.但是知道在其他语言中是否存在解决这个问题的方法也很有趣.
使用一组镜像类层次结构的单元测试.如果您有基类Base和派生类Derived,那么拥有测试类BaseTests并从DerivedTests派生.BaseTests负责测试Base中定义的所有内容.DerivedTests继承了这些测试,并且还负责测试Derived中的所有内容.
如果要在Base中测试受保护的虚拟方法(即Base与其后代类之间的接口),那么创建一个测试该接口的仅测试派生类也是有意义的.