1

这是在 grails 中,但我认为 grails 没有任何特定的内容适用。

我有一个看起来像这样的 Gant 脚本:

includeTargets << grailsScript( "Init" )
includeTargets << grailsScript( "TestApp" )

target(main: "run tests with jacoco code coverage...") {  
     taskdef ( name:'coverage', classname:'org.jacoco.ant.CoverageTask', classpathref:'core.classpath' )
     coverage(*** NEED TO PUT RUN-TESTS TASK HERE ***)
}

setDefaultTarget(main)

这个想法是我正在尝试使用 jacoco 代码覆盖率运行一些单元测试。运行测试的目标在 TestApp.groovy ( allTests() ) 中定义,可以导入并正常运行,但来自 jacoco 的覆盖任务希望将 allTests() 任务作为子任务添加到其中。它需要“包装”任务来运行测试。我正在尝试做的 Ant xml 等效项是这样的:

<jacoco:coverage>
    <taskToRunTheTests ... >
        < ... setup ... >
    </taskToRunTheTests>
</jacoco:coverage>

所以我想我正在寻找的是一种方法,在 Gant 中,从目标定义中获取任务,并将其传递给覆盖任务(我可以做 coverageTask.addChild(theRunTestsTask) ... coverageTask.execute( ) 如有必要)。

这是一个晦涩难懂的问题,希望有人可以帮助我们。

4

1 回答 1

0

我设法让它工作,这并不能完全回答你的具体问题,而是最初的想法;在 gant 构建中为 junit 测试提供 jacoco 生成的覆盖率。我无法让 jacoco:coverage 工作,所以我使用了 jacoco 代理;像这样的东西:

设置代理:

import static groovy.xml.NamespaceBuilder.newInstance as namespace
def jacoco = namespace(ant, 'antlib:org.jacoco.ant')

...

jacoco.agent(property: 'agentvmparam', destfile: "$dirs.projDir\\target\\jacoco.exec", includes: '*', output: 'file', dumponexit: 'true')

...

而此时我们需要将 传递agentvmparam给运行 junit 的 JVM;

jvmarg(value:"${agentvmparam}")

它就像一个魅力。

于 2012-11-30T12:41:28.147 回答