1、起初自己安装一个springboot项目后写了个样例,通过jacoco这个想统计下单元测试覆盖率,结果被idea给带偏了,因为自己初次使用,所以想着直接用maven运行jacoco就可以像别人说的那样,在target里面生成site目录查看报告:
结果运行过程只是提示这个:
Skipping JaCoCo execution due to missing execution data file.
为了解决这个报错耗了我几天时间,但无论怎么修改配置文件仍是提示这个错误,说是jacoco.exec这个文件没有,又说fire组件的代理影响了jacoco的代理,实际是我的配置文件中就没有fire那个配置
各种试错后,因为在idea里面用jacoco这个执行springboot的一个小demo,可以正常统计出行数,我就以为是我的配置的问题:
直到有人说这个错误 Skipping JaCoCo execution due to missing execution data file.还有一种情况是没有写对应的单元测试用例导致,我才想着重新尝试,果然这次就通了,正常产生预期报告,在此写下此文章希望后来者,新手遇见此类问题可以正常运行:
2、配置junit的配置文件
在pom.xml里面增加,也就是我上一篇配置文件里面的dependency增加下面一段:
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- <scope>test</scope>
- </dependency>
然后重新写一个demo,此demo是我参考网上的一个小demo,在src里面增加MessageDemo,文件,同时在test的java下写他的测试类:
保证逻辑代码与测试代码是分开的:
- package com.k8s.springboot;
-
- public class MessageDemo {
- private String message;
-
- public MessageDemo (String message){
- this.message = message;
- }
-
- public String printMessage(){
- System.out.println(this.message);
- return message;
- }
- }
测试的demo代码
- import com.k8s.springboot.MessageDemo;
- import org.junit.Test;
- import static org.junit.Assert.assertEquals;
-
- public class TestMessageDemo {
- private String message="Helloworld";
- private MessageDemo messageDemo = new MessageDemo(this.message);
-
- @Test
- public void testPrintMessage(){
- // message = "NO";
- assertEquals(message, messageDemo.printMessage());
- }
- }
但是还要在测试的下面放一个testRunner文件,来运行junit:
- import org.junit.runner.JUnitCore;
- import org.junit.runner.Result;
- import org.junit.runner.notification.Failure;
-
- public class TestRunner {
- public static void main(String[] args){
- Result result = JUnitCore.runClasses(TestMessageDemo.class);
- for (Failure failure: result.getFailures()){
- System.out.println(failure.toString());
- }
- System.out.println("测试结果:" + result.wasSuccessful());
- }
- }
之后这些做完了,可以手动运行一下
这个时候终于可以执行maven了,看下jacoco是否能正常统计并生成报告:
我是在idea里面配置了本地的maven,也可以用本地的maven在命令行里面执行
mvn clean jacoco:prepare-agent install jacoco:report
当出现这个的时候,我知道确实是生成报告了:
到对应的target里面查看jacoco.exec和site都生成了:
查看site里面的报告一切OK:
希望对你有帮助!