我一直在浏览开发人员代码,发现一些开发人员编写测试的实例,这些实例有助于通过代码覆盖,但没有增加实际价值,例如:-
@Test
public void testProcess() {
createInvestorResponseTransformer.process(exchange);
Assert.assertNotNull("The exchange object should not be NULL.", exchange);
}
总是以某种方式使用assertNotNull。
我们已经有代码审查了,没有得到审查。除了教育开发人员编写更好的单元测试及其价值外,我还可以采取哪些措施来改善这种情况?
总会有一种游戏/颠覆系统的方法,但是我可以使用SonarQube阻止大多数方法吗?
答案 0 :(得分:0)
完整的代码覆盖范围并不总是很好。
经过测试的代码具有巨大的优势,相对于第一版之前已经存在的回归错误。
但是,过早进行代码覆盖会减慢开发动力,并意味着在开发过程中重新设计代码时要重写测试。
然后常常足够多的测试几乎没有意义。
否则,在编写代码时如果没有正确的拦截点和可能的钩子,将很困难。 至少应该进行重构。
因此,至少在目前,有足够的诱惑力和自我辩解来解除代码覆盖范围。
责备之前: -完整的代码覆盖范围不是理想的代码覆盖范围:毫无意义,交付的代码质量和开发速度都太高了
解决方案: -代码覆盖率低于15%的所有内容实际上都不应算作负数
此解决方案将需要一个新的SonarQube。或者意识到SonarQube是不完善的。
人们应该意识到SonarQube并不总是最好的法官。
它将首选:
A[] a = list.toArray(new A[list.size()]);
到
A[] a = list.toArray(new A[0]);
奇怪的是,第二个解决方案更好(更快),即因为列表到数组使用了另一种更快的字节码级别实现。
当然应该防止这种颠覆