有没有办法让代码覆盖率涵盖类这样的类声明?
public class MyClass{
public static void foo(int bar){
System.out.println("The Number is: "+bar);
}
}
我可以使用JUnit测试轻松点击foo方法,但MyClass声明保持红色。这是因为类本身没有构造函数吗?如果是这样,有没有办法覆盖那段代码,而不改变类本身的代码?
由于
答案 0 :(得分:5)
这可能取决于您的具体环境。但我刚检查了Eclipse / EclEmma并看到了你描述的行为。
请记住,类确实有一个构造函数 - 它是默认的构造函数。如果你做一个简单地调用new MyClass()
的测试,看起来红色标记就会消失。
但是 - 仅使用静态方法的类的首选方法是将类标记为final
并创建私有构造函数。当然,如果您创建一个私有构造函数,它将在代码覆盖中显示为红色 - 因为您无法调用私有构造函数!
最后,请记住代码覆盖率是一种工具。我不会在观众中得到关于红色标记的所有内容。
答案 1 :(得分:2)
你的问题迫使我给出两条评论而非直接答案:
除非您有充分的理由,否则请勿使用static
关键字。
一种常见的误解是,用于提供通用功能的类应该具有(仅)static
方法。这来自习惯只使用static
方法调用类实用程序类。
此类所有静态实用程序类将使您的代码难以扩展且难以重用。而且你丢弃了OOP中最强大的工具之一: polymorphism 。而且你唯一的优势是不需要编写构造函数调用...
寻找CodeCoverage非常简单,因为我们有工具为我们提供数据,经理们喜欢用他们生产的数字判断开发人员......
但更重要的是需求范围。遗憾的是,我们没有工具来衡量需求覆盖率。我们必须达到100%要求范围的唯一工具是测试/行为驱动开发(TDD / BDD)。