JaCoCo缺少可执行文件问题

用户1107888

我有一个小型的Maven应用程序,该应用程序使用JaCoCo作为测试覆盖率报告。我不断收到以下错误:

由于缺少执行数据文件而跳过JaCoCo执行

这是我的POM.xml文件。我已经删除了项目元素。

<modelVersion>4.0.0</modelVersion>

<groupId>de.mathema.www</groupId>
<artifactId>jacoco_sample_app</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>jacoco_sample_app</name>
<url>http://maven.apache.org</url>

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
  </dependency>
</dependencies>

<build>
  <plugins>

    <plugin>
      <groupId>org.jacoco</groupId>
      <artifactId>jacoco-maven-plugin</artifactId>
      <version>0.7.6.201602180812</version>
      <executions>
        <execution>
            <goals>
              <goal>prepare-agent</goal>
            </goals>
        </execution>
        <execution>
          <id>report</id>
          <phase>prepare-package</phase>
          <goals>
            <goal>report</goal>
          </goals>
        </execution>
      </executions>
    </plugin>           
  </plugins>
</build>

这是我的主要班级,其src/main/java结构如下:

public class Punkt {
    private Double x;
    private Double y;

    public Punkt(Double x,Double y) {
        this.x = x;
        this.y = y;
    }

    public Punkt(Punkt zweiterPunkt) {
        this.x = zweiterPunkt.x;
        this.y = zweiterPunkt.y;
    }

    public Double getX() {
        return x;
    }

    public void setX(Double x) {
        this.x = x;
    }

    public Double getY() {
        return y;
    }

    public void setY(Double y) {
        this.y = y;
    }

    public boolean punkteVergleichen(Punkt zweiterPunkt) {
        return this.getX().equals(zweiterPunkt.getX()) &&  
       this.getY().equals(zweiterPunkt.getY());

    }
    public String toString() {
        return "("+this.x+","+this.y+")";
    }

}

这是具有以下src/test/java结构的单元测试的类

public class PunktUnitTests {

    @Test
    public void PunkteVergleichen()  throws Exception {
        //a(10.0, 20.0)
        Punkt a = new Punkt(10.0,20.0);

        //b(30.0,40.0)
        Punkt b = new Punkt(30.0,40.0);

        //Der Fall X1!=X2 und Y1!=Y2
        //a(10.0,20.0) und b(30.0,40.0) sind unterschiedlich
        assertFalse(a.punkteVergleichen(b));

        //Der Fall X1 == X2 && Y1 == Y2
        //a(10.0,20.0) und c(10.0,20.0) sind gleich
        Punkt c = new Punkt(a);
        assertTrue(a.punkteVergleichen(a));

        //Der Fall X1 == X2 && Y1 != Y2
        //a(10.0,20.0) und c(10.0,90.0) sind unterschiedlich
        c.setX(10.0);c.setY(90.0);

        assertFalse(a.punkteVergleichen(c));
    }
}

我怎么解决这个问题?

图那基

尽管该消息可能会产生误导,但如果未运行测试JaCoCo Maven插件将发出此警告。这是您的问题:默认情况下,Maven Surefire插件执行遵循特定命名约定的测试,即:

  • "**/Test*.java";
  • "**/*Test.java";
  • "**/*TestCase.java"

但是您的测试名为,后跟“ s”,这将导致该测试无法执行。因此,将发生以下情况:Surefire插件未运行任何测试,因此从未使用JaCoCo代理,因此未创建执行数据文件。PunktUnitTests

这里的简单解决方案是根据Surefire插件的约定将测试重命名为PunktUnitTest

另一个解决方案是将插件配置为执行以“ s”结尾的测试:

<plugin>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.19.1</version>
  <configuration>
    <includes>
      <include>**/*Tests.java</include>
    </includes>
  </configuration>
</plugin>

请注意,如果您想将来避免此类错误,可以通过将failIfNoTests参数设置为将Surefire插件配置为在没有运行测试的情况下失败true

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章