【问题标题】:Unit tests coverage using Jacoco for Scala使用 Jacoco for Scala 进行单元测试覆盖率
【发布时间】:2013-03-17 10:29:13
【问题描述】:

当我在我们的 Maven 项目中使用以下结构时:

<plugins>
        <plugin>
            <groupId>org.scala-tools</groupId>
            <artifactId>maven-scala-plugin</artifactId>
            <version>2.15.2</version>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>testCompile</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <args>
                    <arg>-g:line</arg>
                </args>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.5.8.201207111220</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>

测试已执行,但未创建 jacoco.exec 文件。我尝试将此标记 destFile 添加到 prepare-agent 目标但没有成功(未创建具有覆盖信息的文件)。

任何人都可以使用 maven 和 Jacoco 计算 Scala 单元测试的代码覆盖率吗?

【问题讨论】:

    标签: unit-testing scala jacoco


    【解决方案1】:

    Jacoco maven 插件的工作依赖于 JDK、Scala 和插件本身的版本。

    刚刚添加了相同的配置,它可以正常工作:jacoco.exec 和带有报告的 site/jacoco 都在目标目录中:https://github.com/plokhotnyuk/calculator/commit/e3a84db02dd942b0df71d4fa337df29512e213f6

    然后在使用最新 (0.6.2.201302030002) 版本的 Jacoco maven 插件时出现代理失败:

    Caused by: java.lang.RuntimeException: Class java/util/UUID could not be instrumented.
        at org.jacoco.agent.rt.internal_5d10cad.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:138)
        at org.jacoco.agent.rt.internal_5d10cad.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:99)
        at org.jacoco.agent.rt.internal_5d10cad.PreMain.createRuntime(PreMain.java:51)
        at org.jacoco.agent.rt.internal_5d10cad.PreMain.premain(PreMain.java:43)
        ... 6 more
    Caused by: java.lang.NoSuchFieldException: $jacocoAccess
        at java.lang.Class.getField(Class.java:1542)
        at org.jacoco.agent.rt.internal_5d10cad.core.runtime.ModifiedSystemClassRuntime.createFor(ModifiedSystemClassRuntime.java:136)
        ... 9 more
    FATAL ERROR in native method: processing of -javaagent failed
    Exception in thread "main" 
    

    然后通过从JDK8切换到JDK7解决了故障。覆盖率报告数字没有改变。

    另外,在切换到 Scala 2.10 后,源代码行高亮开始看起来有所不同:

    斯卡拉 2.9

    斯卡拉 2.10

    【讨论】:

      猜你喜欢
      • 2016-04-07
      • 2017-10-07
      • 2021-07-18
      • 1970-01-01
      • 2014-09-26
      • 2015-05-01
      • 1970-01-01
      • 2016-05-22
      相关资源
      最近更新 更多