首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用命令行中的Junit & Jacoco,java覆盖率为0%

使用命令行中的Junit & Jacoco,java覆盖率为0%
EN

Stack Overflow用户
提问于 2018-03-27 06:47:36
回答 1查看 4.3K关注 0票数 2

在所有这些进程中,我只使用了“命令行”,我想这样做。(不使用Ant、maven、gradle等)。

我想运行Junit测试用例和JaCoCo覆盖率估计。

首先,下面是我的代码

Calculator.java

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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);
  }
}

C\Cal中有2个java文件,Cal文件夹包含4个jar文件(junit-4.12.jarhamcrest-core-1.3.jarjacococli.jarjacocoagent.jar)。

在这种情况下,我制作了类文件Calculator.class

代码语言:javascript
运行
复制
javac Calculator.java

然后,我制作了exec文件(我认为它是Calculator.java文件的执行文件)来估计Calculator.java文件的单元测试覆盖率。

代码语言:javascript
运行
复制
java -javaagent:jacocoagent.jar=destfile=jacoco.exec

之后,我使用exec文件和命令解压报告。

代码语言:javascript
运行
复制
java -jar jacococli.jar report jacoco.exec --classfiles Calculator.class --html "report" --name jacocoReport --sourcefiles "Calulator.java"

但是,我所做的html报告中的测试覆盖率是0%。

以下是我的问题:

  1. 你知道为什么我的覆盖率是0%吗?
  2. 试图提取我想要的覆盖结果有什么问题吗?
  3. 在使用Calculator.java代码计算CalculatorTest.java文件的覆盖率和提取报表时,仅使用Calculator.class编写--classfiles是否正确?
  4. 即使在Calculator.javaCalculatorTest.java中插入--sourcefiles,结果也没有差别。我说错了吗?或者--sourcefiles的作用是什么

这是我提到的网页:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-27 07:32:16

你知道为什么我的覆盖率是0%吗? 即使在Calculator.javaCalculatorTest.java中插入--sourcefiles,结果也没有差别。我说错了吗?或者--sourcefiles的作用是什么?

--sourcefiles应该指向包含包的目录。在您的示例中,您的文件使用默认包(没有包),因此--sourcefiles应该指向包含Calculator.java的目录。

试图提取我想要的覆盖结果有什么问题吗?

不-没有问题。例如,Calculator.java位于src目录中,CalculatorTest.java位于test-src目录中

代码语言:javascript
运行
复制
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

编写后续报告

当使用Calculator.java代码计算CalculatorTest.java文件的覆盖率并提取报表时,仅使用Calculator.class编写--classfiles是否正确?

--classfiles应该指向类文件,或者包含类文件的目录,或者指向包含类文件的归档,这些文件应该出现在报表中。在上面的示例中没有指定CalculatorTest.class,所以它没有出现在报告中。如有指明:

代码语言:javascript
运行
复制
java -jar jacoco-0.8.1/lib/jacococli.jar report jacoco.exec --classfiles classes --sourcefiles src --classfiles test-classes --sourcefiles test-src --html report

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49506057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档