代码覆盖率未达到 class 声明

Code coverage does not reach class declaration

有什么方法可以让代码覆盖率覆盖像这样的 class 的 class 声明?

public class MyClass{

    public static void foo(int bar){
        System.out.println("The Number is: "+bar);
    }
}

我可以很容易地通过 JUnit 测试找到 foo 方法,但 MyClass 声明保持红色。这是因为 class 本身没有构造函数吗?如果是这样,有没有办法覆盖那部分代码,而不更改 class 本身的代码?

谢谢

这可能取决于您的特定环境。但我刚刚检查了 Eclipse/EclEmma 并看到了你描述的行为。

请记住,class 有一个构造函数 - 它是默认构造函数。如果您进行仅调用 new MyClass() 的测试,看起来红色标记会消失。

但是 - 对于仅具有静态方法的 class 的首选方法是将 class 标记为 final 并创建私有构造函数。当然,如果您创建一个私有构造函数,它将在代码覆盖率中显示为红色 - 因为您不能调用私有构造函数!

最后,请记住代码覆盖率是一种工具。我不会因为查看器中的红色标记而大费周章。

你的问题迫使我给出两条评论而不是直接回答:

  1. 除非有充分的理由,否则不要使用 static 关键字。

    一个常见的误解是 class 用于提供通用功能的 es 应该(只)有 static 方法。这是由于习惯将仅使用 static 方法的 class 称为 实用程序 classes.

    这样的全静态实用程序class将使您的代码难以扩展和重用。你扔掉了 OOP 中最强大的工具之一:多态性。你唯一的优势是不需要编写构造函数调用...

  2. 寻找 CodeCoverage 很容易,因为我们有工具可以为我们提供相关数据,而且管理人员喜欢通过他们产生的数据来判断开发人员...

    但更重要的是需求覆盖率。不幸的是,我们没有工具来衡量 需求覆盖率 。我们必须达到 100% 需求覆盖率 的唯一工具是 test/behavior 驱动开发 (TDD/BDD).