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

检查代码覆盖率的单元测试中的反射

  •  4
  • gtrak  · 技术社区  · 15 年前

    下面是场景。我有vo(值对象)或dto对象,它们只是数据容器。当我把它们分开保存到一个数据库中(由于很多原因)并不能优雅地映射到VO时,我想测试一下每个字段是否在数据库中成功创建,以及是否成功地读取以重建VO。

    有没有一种方法可以测试我的测试覆盖了VO中的每个字段?作为解决方案的一部分,我有一个使用反射迭代vo的字段的想法,但也许你们以前解决过这个问题?

    当我在VO中添加字段时,我希望这个测试失败,不要记住在我的测试中添加对它的检查。

    开发环境: 使用junit、hibernate/spring和eclipse

    3 回复  |  直到 15 年前
        1
  •  5
  •   ewernli    15 年前

    保持简单 :为每个vo/dto编写一个测试:

    1. 用测试数据填充vo/dto
    2. 保存它
    3. (可选:使用纯JDBC检查所有内容是否已在数据库级别正确保存)
    4. 载入它
    5. 检查加载的vo/dto和原始的vo/dto是否匹配

    生产代码将不断发展,测试也需要维护。使测试尽可能简单,即使它们是重复的,也是最好的方法。 过度设计测试 或者测试框架本身使测试成为通用的(例如通过读取带有反射的字段并自动填充vo/dto)会导致几个问题:

    1. 编写测试所花费的时间更高
    2. 可能会在测试中引入错误
    3. 维护测试比较困难,因为它们更复杂
    4. 测试很难发展,例如,对于新类型的vo/dto,通用代码可能不起作用,与另一种稍有不同,稍后将介绍(这只是一个示例)
    5. 测试不能简单地用作生产代码工作方式的示例。

    测试代码和生产代码的性质非常不同 . 在生产代码中,您试图避免重复并最大限度地重用。生产代码可能很复杂,因为它是经过测试的。另一方面,您应该尽可能简单地进行测试,重复也可以。如果一个重复的部分被破坏,测试无论如何都会失败。

    当生产代码发生更改时,可能需要进行多个测试 平凡地 改变。测试被视为 真无聊 一段代码。但我认为他们应该这样。

    如果我把你的问题搞错了,就告诉我。

        2
  •  1
  •   pitpod    15 年前

    我建议你 cobertura 为了这个任务。 运行测试后,如果使用 cobertura-check Ant任务您可以添加覆盖范围检查并使用属性停止Ant调用 haltonfailure .

        3
  •  0
  •   Gutzofter    15 年前

    你可以把它作为 VO . 如果在使用getter时未设置字段,则可能引发异常。