java 命令行中 Junit 和 Jacoco 的覆盖率为 0%
java coverage is 0% with Junit & Jacoco from the command line
我在所有这些过程中只使用了 'command line',我想这样做。(不使用 Ant、maven、gradle 等)
我想运行 Junit测试用例和JaCoCo覆盖率估计。
首先,下面是我的代码
Calculator.java
:
public class Calculator {
public int evaluate(String expression) {
int sum = 0;
for(String summand: expression.split("\+"))
sum += Integer.valueOf(summand);
System.out.println("Hello World!!");
return sum;
}
}
CalculatorTest.java
:
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class CalculatorTest {
@Test
public void evaluatesExpression(){
Calculator calculator = new Calculator();
int sum = calculator.evaluate("1+2+3");
assertEquals(6, sum);
}
}
2 java 个文件在 C\Cal
和 Cal
文件夹中包含 4 个 jar 文件
(junit-4.12.jar
, hamcrest-core-1.3.jar
, jacococli.jar
, jacocoagent.jar
)
在这种情况下,我制作了类文件Calculator.class
。
javac Calculator.java
然后,我制作了 exec
(我认为它是 jacoco 的执行文件)文件来估计 Calculator.java
文件的单元测试覆盖率。
java -javaagent:jacocoagent.jar=destfile=jacoco.exec
之后,我使用 exec
文件和命令
提取报告
java -jar jacococli.jar report jacoco.exec --classfiles Calculator.class --html "report" --name jacocoReport --sourcefiles "Calulator.java"
然而,我所做的 html 报告中的测试覆盖率为 0%。
这是我的问题:
你知道为什么我的覆盖率是0%吗?
尝试提取我想要的覆盖结果有什么问题吗?
通过CalculatorTest.java
代码计算Calculator.java
文件的覆盖率并提取报告时,仅使用[=24=写--classfiles
是否正确]?
即使在--sourcefiles
中同时插入Calculator.java
和CalculatorTest.java
,结果也没有区别。我说错了吗?或者--sourcefiles
的效果是什么?
这是我引用的网页:
Do you know why my coverage is 0%?
There is no difference in the results even if you insert both Calculator.java
and CalculatorTest.java
in --sourcefiles
. Did I put it wrong? Or what is the effect of --sourcefiles
?
--sourcefiles
应该指向包含软件包的目录。在您的情况下,您的文件使用默认包(无包),因此 --sourcefiles
应指向包含 Calculator.java
.
的目录
Is there any problem in trying to extract the coverage result I want?
否 - 没有问题。例如,目录 src
中有 Calculator.java
,目录 test-src
中有 CalculatorTest.java
mkdir classes
javac src/Calculator.java -d classes
mkdir test-classes
javac -cp junit-4.12.jar:classes test-src/CalculatorTest.java -d test-classes
java -javaagent:jacoco-0.8.1/lib/jacocoagent.jar -cp junit-4.12.jar:hamcrest-core-1.3.jar:classes:test-classes org.junit.runner.JUnitCore CalculatorTest
java -jar jacoco-0.8.1/lib/jacococli.jar report jacoco.exec --classfiles classes --sourcefiles src --html report
产生以下报告
When calculating the coverage of the Calculator.java
file by CalculatorTest.java
code and extracting the report, is it correct to write --classfiles
only using Calculator.class
?
--classfiles
应指向 class 个文件,或包含 class 个文件的目录,或包含 class 个文件的存档,它们应出现在报告中。 CalculatorTest.class
没有在上面的例子中指定,所以它不会出现在报告中。如果指定:
java -jar jacoco-0.8.1/lib/jacococli.jar report jacoco.exec --classfiles classes --sourcefiles src --classfiles test-classes --sourcefiles test-src --html report
我在所有这些过程中只使用了 'command line',我想这样做。(不使用 Ant、maven、gradle 等)
我想运行 Junit测试用例和JaCoCo覆盖率估计。
首先,下面是我的代码
Calculator.java
:
public class Calculator {
public int evaluate(String expression) {
int sum = 0;
for(String summand: expression.split("\+"))
sum += Integer.valueOf(summand);
System.out.println("Hello World!!");
return sum;
}
}
CalculatorTest.java
:
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class CalculatorTest {
@Test
public void evaluatesExpression(){
Calculator calculator = new Calculator();
int sum = calculator.evaluate("1+2+3");
assertEquals(6, sum);
}
}
2 java 个文件在 C\Cal
和 Cal
文件夹中包含 4 个 jar 文件
(junit-4.12.jar
, hamcrest-core-1.3.jar
, jacococli.jar
, jacocoagent.jar
)
在这种情况下,我制作了类文件Calculator.class
。
javac Calculator.java
然后,我制作了 exec
(我认为它是 jacoco 的执行文件)文件来估计 Calculator.java
文件的单元测试覆盖率。
java -javaagent:jacocoagent.jar=destfile=jacoco.exec
之后,我使用 exec
文件和命令
java -jar jacococli.jar report jacoco.exec --classfiles Calculator.class --html "report" --name jacocoReport --sourcefiles "Calulator.java"
然而,我所做的 html 报告中的测试覆盖率为 0%。
这是我的问题:
你知道为什么我的覆盖率是0%吗?
尝试提取我想要的覆盖结果有什么问题吗?
通过
CalculatorTest.java
代码计算Calculator.java
文件的覆盖率并提取报告时,仅使用[=24=写--classfiles
是否正确]?即使在
--sourcefiles
中同时插入Calculator.java
和CalculatorTest.java
,结果也没有区别。我说错了吗?或者--sourcefiles
的效果是什么?
这是我引用的网页:
Do you know why my coverage is 0%?
There is no difference in the results even if you insert both
Calculator.java
andCalculatorTest.java
in--sourcefiles
. Did I put it wrong? Or what is the effect of--sourcefiles
?
--sourcefiles
应该指向包含软件包的目录。在您的情况下,您的文件使用默认包(无包),因此 --sourcefiles
应指向包含 Calculator.java
.
Is there any problem in trying to extract the coverage result I want?
否 - 没有问题。例如,目录 src
中有 Calculator.java
,目录 test-src
CalculatorTest.java
mkdir classes
javac src/Calculator.java -d classes
mkdir test-classes
javac -cp junit-4.12.jar:classes test-src/CalculatorTest.java -d test-classes
java -javaagent:jacoco-0.8.1/lib/jacocoagent.jar -cp junit-4.12.jar:hamcrest-core-1.3.jar:classes:test-classes org.junit.runner.JUnitCore CalculatorTest
java -jar jacoco-0.8.1/lib/jacococli.jar report jacoco.exec --classfiles classes --sourcefiles src --html report
产生以下报告
When calculating the coverage of the
Calculator.java
file byCalculatorTest.java
code and extracting the report, is it correct to write--classfiles
only usingCalculator.class
?
--classfiles
应指向 class 个文件,或包含 class 个文件的目录,或包含 class 个文件的存档,它们应出现在报告中。 CalculatorTest.class
没有在上面的例子中指定,所以它不会出现在报告中。如果指定:
java -jar jacoco-0.8.1/lib/jacococli.jar report jacoco.exec --classfiles classes --sourcefiles src --classfiles test-classes --sourcefiles test-src --html report