如何确保junit测试的质量?

如何确保junit测试的质量?,junit,Junit,是否有经过验证的方法来验证junit测试或集成测试的质量 您的业务分析师是否应该向cerfity审查单元测试?或者还有其他方法吗? 在传统的代码优先环境中,同行或领导会审查测试计划,但自动化测试如何 我看了看线程,但无法提取任何有意义的内容 你可以考虑代码覆盖工具来确保100%的代码行被测试。Emma是一个很好的java工具(http://emma.sourceforge.net/).代码审查是确保测试质量的最佳方法。我不会让业务分析师审查测试,因为他们可能没有必要的培训来理解测试。此外,单元测

是否有经过验证的方法来验证junit测试或集成测试的质量

您的业务分析师是否应该向cerfity审查单元测试?或者还有其他方法吗? 在传统的代码优先环境中,同行或领导会审查测试计划,但自动化测试如何

我看了看线程,但无法提取任何有意义的内容


你可以考虑代码覆盖工具来确保100%的代码行被测试。Emma是一个很好的java工具(http://emma.sourceforge.net/).

代码审查是确保测试质量的最佳方法。我不会让业务分析师审查测试,因为他们可能没有必要的培训来理解测试。此外,单元测试并不都在功能级别上进行,因为在功能级别上分析人员的需求是有限的。分析师可能会说“当用户单击保存时,配置文件被保存”,而您可能需要跨多个层编写n个测试才能获得该功能。

代码覆盖工具是一个良好的开端,但知道某一行已执行并不意味着它已被测试。没有断言或
expected=Exception.class
的臭名昭著的测试用例就是一个例子

我可以想象在这一层面上有几个标准:

  • 如果对线路进行测试,对其进行的任何更改(反转条件、移除…)应至少失败一次测试
  • 给定的一段逻辑应该仅基于其测试完全可重构
  • 测试不镜像生产代码
  • 测试不应依赖于当前日期、区域设置、时区和其他测试的顺序
有人可能会尝试将第一个自动化,其他人则或多或少主观


对于做测试评审的分析师来说,可能只有装置可读性足以满足非开发人员的需求。

这里有一篇很好的链接文章:

以及:

良好的测试⇒ 高覆盖率 高覆盖率⇒/⇒ 良好的测试

覆盖率工具有助于确定项目的哪些领域需要更多关注,但这并不意味着覆盖率好的领域不需要更多关注。

代码覆盖率可以验证测试的质量

因此,首先检查您的代码覆盖率是否足够高。在此之后,通过突变测试验证您的测试是否良好。突变测试工具对生产代码进行微小更改并重新运行测试-在修改后,良好的测试应该失败。有关Java中的变异测试工具,请参阅以下博客:


但这仍然不够,测试应该是良好的书写和可读性。因此,您还需要对测试进行代码审查和质量规则验证。我推荐一本写好测试的好书。第十章:本书中的内容免费提供

我不会说100%的代码覆盖率结果可以确保JUnit测试的质量。这可能会导致开发人员添加一些无用的测试,只是为了确保他们的覆盖率结果足够。我不会投反对票,但覆盖率不是质量的指标,而是覆盖率的指标。拥有100%的覆盖率并不能确保测试正在测试任何东西。代码覆盖率只会确保每一行代码都有一个测试。它仍然不能证明我在真正的TDD或测试优先环境中的测试质量。我是否遗漏了什么?我同意这不是质量的最佳衡量标准,但它确实提供了一个度量标准,即需要或期望多少单元测试。最终,单元测试的质量取决于招聘过程的质量(以及管理层随后要求开发人员负责编写测试的程度)。代码覆盖率是一种(可测量的)方法,可以强制执行最低限度的测试。代码审查是一种工具,但如果使用它的人不知道如何最好地使用它,那么它是无用的。进行代码审查的人员需要有正确的测试关键思维,以确定某个东西是否经过了充分的测试。工具可以提供有用的指标来帮助识别需要关注的领域,但最终是编写代码的人最了解他/她的组件的关键情况。下面是一个很好的突变测试思维方式示例:@MariuszS突变测试可以确保百分之百的junit代码质量吗?附加论文: