首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Jacoco的覆盖任务中运行Ant宏

在Jacoco的覆盖任务中运行Ant宏
EN

Stack Overflow用户
提问于 2015-10-20 08:36:11
回答 1查看 700关注 0票数 1

我的项目是使用Ant,它有几个测试套件。由于每个套件都以类似的方式运行,因此定义了一个宏:

代码语言:javascript
复制
<macrodef name="exec-tests">
    <attribute name="test-suite" />
    <element name="test-run" implicit="yes" />
    <sequential>
        <junit printsummary="yes" haltonfailure="true" haltonerror="true" showoutput="true" outputtoformatters="true" fork="true" maxmemory="512m">
            <jvmarg value="-XX:MaxPermSize=256m" />
            <jvmarg value="-Xmx512m" />
            <jvmarg value="-Xms512m" />
            <classpath refid="test.run.class.path" />
            <formatter type="plain" usefile="false" />
            <formatter type="xml" usefile="true" />
            <test name="@{test-suite}" todir="${test.build.results.dir}" />
        </junit>
    </sequential>
</macrodef>

因此,有几个目标运行着这样的不同的套件:

代码语言:javascript
复制
<target name="run-xxx-tests" depends="build-tests">
    <exec-tests test-suite="com.mycompany.XxxTestsSuite" />
</target>

<target name="run-yyy-tests" depends="build-tests">
    <exec-tests test-suite="com.mycompany.YyyTestsSuite" />
</target>

现在,我还想运行一个带有Jacoco覆盖范围的测试套件。所以很高兴这样做:

代码语言:javascript
复制
<target name="run-xxx-tests-with-coverage" depends="build-tests">
    <jacoco:coverage destfile="${test.coverage.unit.file}">
        <exec-tests test-suite="com.mycompany.XxxTestsSuite" />
    </jacoco:coverage>
</target>

但是,Jacoco似乎不支持覆盖率标记中的宏,因为我收到了错误:

代码语言:javascript
复制
Caused by: C:\Users\taavi\projects\cds\build.xml:87: exec-tests is not a valid child of the coverage task
    at org.jacoco.ant.CoverageTask.addTask(CoverageTask.java:68)
    at org.apache.tools.ant.UnknownElement.handleChildren(UnknownElement.java:367)

现在,我创建了另一个宏,它非常类似于“exec-test”,但只是增加了覆盖率。这并不重要,但我想知道还有什么方法可以避免这个重复的"junit“任务部分吗?

k6ps

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-20 16:25:25

<jacoco:coverage>任务具有可能有用的 attribute .

如果设置为true,将为包含的任务收集覆盖数据。

要使用enabled,可以对<exec-tests>进行几次更改

  • <jacoco:coverage>移动到其中
  • 添加一个可选的coverage.destfile属性

会是什么样子..。

代码语言:javascript
复制
<macrodef name="exec-tests">
    <attribute name="test-suite" />
    <!-- If <test-suite> is called without coverage.destfile, then -->
    <!-- coverage.enabled won't be set to true and coverage info won't -->
    <!-- be collected.  -->
    <attribute name="coverage.destfile" default="" />
    <element name="test-run" implicit="yes" />
    <sequential>
        <local name="coverage.enabled" />
        <condition property="coverage.enabled" value="false" else="true">
            <equals arg1="@{coverage.destfile}" arg2="" />
        </condition>
        <jacoco:coverage enabled="${coverage.enabled}" destfile="@{coverage.destfile}">
            <junit ...>
            ...
            </junit>
        </jacoco:coverage>
    </sequential>
</macrodef>

然后,每个测试可以指定是否应该收集覆盖信息.

代码语言:javascript
复制
<exec-tests
    test-suite="com.mycompany.XxxTestsSuite"
    coverage.destfile="${test.coverage.unit.file}" />

在上面的例子中,由于提供了coverage.destfile,所以将收集覆盖率信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33231802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档