代码覆盖范围未达到类声明

时间:2017-09-28 20:23:13

标签: java unit-testing junit code-coverage

有没有办法让代码覆盖率涵盖类这样的类声明?

public class MyClass{

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

我可以使用JUnit测试轻松点击foo方法,但MyClass声明保持红色。这是因为类本身没有构造函数吗?如果是这样,有没有办法覆盖那段代码,而不改变类本身的代码?

由于

2 个答案:

答案 0 :(得分:5)

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

请记住,类确实有一个构造函数 - 它是默认的构造函数。如果你做一个简单地调用new MyClass()的测试,看起来红色标记就会消失。

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

最后,请记住代码覆盖率是一种工具。我不会在观众中得到关于红色标记的所有内容。

答案 1 :(得分:2)

你的问题迫使我给出两条评论而非直接答案:

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

    一种常见的误解是,用于提供通用功能的类应该具有(仅)static方法。这来自习惯只使用static方法调用类实用程序类

    此类所有静态实用程序类将使您的代码难以扩展且难以重用。而且你丢弃了OOP中最强大的工具之一: polymorphism 。而且你唯一的优势是不需要编写构造函数调用...

  2. 寻找CodeCoverage非常简单,因为我们有工具为我们提供数据,经理们喜欢用他们生产的数字判断开发人员......

    但更重要的是需求范围。遗憾的是,我们没有工具来衡量需求覆盖率。我们必须达到100%要求范围的唯一工具是测试/行为驱动开发(TDD / BDD)。