Code Coverage Kotlin and Java together using Maven - Jacoco

二次信任 提交于 2020-05-27 03:14:29

问题


I am using Maven plugin to generate the code-coverage with Maven Plugin as below:

             <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>${jacoco.version}</version>
                <executions>
                    <execution>
                        <id>pre-unit-test</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>post-unit-test</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

But this does not include any code coverage of the kotlin code in the project. I just perform coverage on Java Code.

The structure of the project is:

/projectName
  /src
    /main
      /java
      /kotlin
  pom.xml

Also, in the pom, kotlin source is being compiled first (using kotlin-maven-plugin) and then the java source.

How to generate the coverage for both Java as well as Kotlin code?


回答1:


Given following src/main/java/InJava.java

class InJava {
  void example() {
  }
}

following src/main/kotlin/InKotlin.kt

class InKotlin {
  fun example() {
  }
}

following src/test/java/ExampleTest.java

public class ExampleTest {
  @org.junit.Test
  public void test() {
    new InJava().example();
    new InKotlin().example();
  }
}

and pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>example</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <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.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
          <execution>
            <!--
            Add "src/main/kotlin" as additional source directory,
            so that kotlin-maven-plugin and jacoco-maven-plugin will look for files in it
            -->
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>add-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>${project.basedir}/src/main/kotlin</source>
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-maven-plugin</artifactId>
        <version>1.3.30</version>
        <executions>
          <execution>
            <id>compile</id>
            <goals>
              <goal>compile</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

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

</project>

execution of mvn verify

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------< org.example:example >-------------------------
[INFO] Building example 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- jacoco-maven-plugin:0.8.3:prepare-agent (default) @ example ---
[INFO] argLine set to -javaagent:/Users/evgeny.mandrikov/.m2/repository/org/jacoco/org.jacoco.agent/0.8.3/org.jacoco.agent-0.8.3-runtime.jar=destfile=/private/tmp/j/target/jacoco.exec
[INFO]
[INFO] --- build-helper-maven-plugin:3.0.0:add-source (add-source) @ example ---
[INFO] Source directory: /private/tmp/j/src/main/kotlin added.
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ example ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /private/tmp/j/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ example ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /private/tmp/j/target/classes
[INFO]
[INFO] --- kotlin-maven-plugin:1.3.30:compile (compile) @ example ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ example ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /private/tmp/j/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ example ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /private/tmp/j/target/test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ example ---
[INFO] Surefire report directory: /private/tmp/j/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running ExampleTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.046 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ example ---
[INFO] Building jar: /private/tmp/j/target/example-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- jacoco-maven-plugin:0.8.3:report (default) @ example ---
[INFO] Loading execution data file /private/tmp/j/target/jacoco.exec
[INFO] Analyzed bundle 'example' with 2 classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  4.870 s
[INFO] Finished at: 2019-04-22T15:41:31+02:00
[INFO] ------------------------------------------------------------------------

compiles Kotlin and Java code, executes tests with JaCoCo Java Agent and generates following report in directory target/site/jacoco

which contains both Kotlin and Java code.



来源:https://stackoverflow.com/questions/55765833/code-coverage-kotlin-and-java-together-using-maven-jacoco

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!