我正在以TDD方式编写JDBC驱动程序的实现(是的,你正确地阅读),虽然我此时只完成了类存根,只有一些小功能,但它只是发生在我身上,因为它Statement
是一个超类对于PreparedStatement
哪个是超类CallableStatement
,当我真正开始为这些类的实现编写测试时应该怎么做,其中一个我应该这样做:
创建一个测试套件Statement
,然后扩展该套件以进行其他测试PreparedStatement
,然后执行相同的操作CallableStatement
.
单独测试每个实现,忽略从超类继承的方法.
对每个实施类别严格测试每种方法; 根据实现,一些继承的方法可能会有所不同.这种轻微变化将是我测试实现使用的所有继承方法.
第二个感觉最自然,但由于我放到第三个的原因,我不确定这样做是否明智.那么,您认为我应该怎么做?
"为每个实现类单独测试每个方法"
特别是,未能正确覆盖超类方法是一个常见的错误.子类的作者对超类做出假设.超类发生了变化,子类现在被破坏了.
如果这意味着您将为每个测试子类重复运行相同的测试,那么我将永远不会做替代1(让测试类层次结构与实际的类层次结构相同).我也普遍对继承测试类而不是通用实用程序基类持怀疑态度.
我通常对层次结构中的每个类进行1次测试,抽象与否.所以基类有一个单独的测试(通常有一个测试本地私有子类,用于专门测试它),我使用我的子类知识为每个子类编写适当的测试.我可以在报道中看到缺少测试的内容,所以我通常不会过于正式化.