我有一个小型的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] 删除。
我来说两句