代码之家  ›  专栏  ›  技术社区  ›  Esko

我应该继承自超类的单元测试方法吗?

  •  8
  • Esko  · 技术社区  · 16 年前

    我目前正在编写一个JDBC驱动程序的实现( 是的,你读对了 )以TDD的方式,虽然我现在只完成了类存根和一些次要功能,但我突然想到 Statement PreparedStatement 哪一个是 CallableStatement

    1. 为创建一个测试套件 陈述 然后扩展该套件以进行其他测试 可赎回声明
    2. 单独测试每个实现,忽略从超类继承的方法。
    3. 严格地测试每个实现类的每个方法;有些继承方法的工作方式可能会因实现的不同而有所不同。稍微有点不同的是,我会测试实现使用的所有继承方法。

    4 回复  |  直到 16 年前
        1
  •  11
  •   S.Lott    16 年前

    “为每个实现类分别测试每个方法”

    特别是,未能正确重写超类方法是一个常见的错误。子类的作者对超类进行假设。超类改变了,子类现在被破坏了。

        2
  •  7
  •   krosenvold    16 年前

    如果这意味着您将为每个测试子类重复运行相同的测试,那么我绝对不会执行备选方案1(让测试类层次结构与实际的类层次结构相同)。除了通用实用程序基类之外,我还对测试类的子类化持怀疑态度。

    我通常对层次结构中的每个类进行一次测试,不管是否抽象。因此,基类有一个单独的测试(通常带有一个专门用于测试它的测试本地私有子类),我使用我对子类的知识为每个子类编写适当的测试。我可以在覆盖率运行中看到缺少的测试,所以我通常不会预先太正式化。

        3
  •  4
  •   Jon Skeet    16 年前

    单元测试当然可以走到极端——从中获得的价值与付出的努力之间的平衡总是值得的。

        4
  •  1
  •   philant    16 年前

    使用TDD,您不应该以测试方法为目标,而应该以测试代码的行为或功能为目标。因此,在实现子类时,您可以限制只测试与基类不同的行为。当有疑问时,写一个新的测试。