2011-09-17 96 views
13

单元测试子类的最佳方法是什么?假设有一个我已经写过测试的基类,并且有一些子类覆盖了父类在公共方法和/或受保护方法中的一些行为。如何进行单元测试子类

我的子类的测试类是否应该扩展(并在合适的地方覆盖测试方法)我的基类的测试类,以便应用所有基类测试?否则,我希望有重复的测试代码。

回答

9

根据Liskov substitution principle,子类的实例应展示与基类相同的属性,并因此传递(全部?)相同的单元测试。

我会运行[也许不是全部,所有相关的]基类测试每个子类。这可以通过test helper来实现。

是的,子类化测试类可能是避免单元测试中重复的好方法。看看Testcase superclass模式。

+0

您对Liskov替代原理如何适用的断言是不正确的。子类的方法不必通过所有基本的单元测试,否则它们在行为上会完全相同。在这种情况下,重写基本方法有什么意义? –

+5

Liskov原理的原始发布是正确的。子类应该通过超类的所有单元测试,*和更多*。额外的测试反映了子类的附加功能。当然,你可以用违反Liskov的方式重写一个方法,在这种情况下,相关的单元测试将会失败。 – ComDubh

6

没有示例就很难看出来,但我会在一组测试中测试基类,然后为子类创建新测试,并测试不同的行为。