如何防止开发人员使用无用的断言颠覆代码覆盖率?

时间:2018-09-07 08:15:45

标签: java junit sonarqube

我一直在浏览开发人员代码,发现一些开发人员编写测试的实例,这些实例有助于通过代码覆盖,但没有增加实际价值,例如:-

  @Test
  public void testProcess() {
    createInvestorResponseTransformer.process(exchange);
    Assert.assertNotNull("The exchange object should not be NULL.", exchange);

  }

总是以某种方式使用assertNotNull。

我们已经有代码审查了,没有得到审查。除了教育开发人员编写更好的单元测试及其价值外,我还可以采取哪些措施来改善这种情况?

总会有一种游戏/颠覆系统的方法,但是我可以使用SonarQube阻止大多数方法吗?

1 个答案:

答案 0 :(得分:0)

完整的代码覆盖范围并不总是很好。

经过测试的代码具有巨大的优势,相对于第一版之前已经存在的回归错误。

但是,过早进行代码覆盖会减慢开发动力,并意味着在开发过程中重新设计代码时要重写测试。

然后常常足够多的测试几乎没有意义。

否则,在编写代码时如果没有正确的拦截点和可能的钩子,将很困难。 至少应该进行重构。

因此,至少在目前,有足够的诱惑力和自我辩解来解除代码覆盖范围。

责备之前: -完整的代码覆盖范围不是理想的代码覆盖范围:毫无意义,交付的代码质量和开发速度都太高了

解决方案: -代码覆盖率低于15%的所有内容实际上都不应算作负数

此解决方案将需要一个新的SonarQube。或者意识到SonarQube是不完善的。

人们应该意识到SonarQube并不总是最好的法官。

它将首选:

A[] a = list.toArray(new A[list.size()]);

A[] a = list.toArray(new A[0]);

奇怪的是,第二个解决方案更好(更快),即因为列表到数组使用了另一种更快的字节码级别实现。


当然应该防止这种颠覆

  • 还不断审查单元测试;你做了什么。制作门票。要付出的代价。
  • 要么修复单元测试用例,要么添加注释以说明不测试此功能。
  • 在发表评论时手动取消标记声纳库伯的警告
  • @SuppressWarnings可能不是评论,而是可能。不知道