2011-01-28 2 views
1

Ceci est dans les grails, mais je ne pense pas que quelque chose de spécifique aux grails s'applique.Gant build scripting, comment récupérer une tâche que je veux exécuter

J'ai un script qui ressemble à quelque chose Gant comme ceci:

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) 

L'idée est que je suis en train d'exécuter des tests unitaires avec une couverture de code jacoco. La cible pour exécuter les tests est définie dans TestApp.groovy (allTests()) et peut être importée et exécutée correctement, mais la tâche de couverture de jacoco souhaite que la tâche allTests() soit ajoutée en tant que tâche enfant. Il doit "envelopper" la tâche pour exécuter les tests. L'équivalent xml Ant pour ce que je suis en train de faire est la suivante:

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

donc je suppose que ce que je suis à la recherche est un moyen, dans Gant, pour obtenir une tâche à partir d'une définition de cible, et le transmettre le long de la tâche de couverture (je peux faire coverageTask.addChild (theRunTestsTask) ... coverageTask.execute() si nécessaire).

Ceci est un obscur, espérons que quelqu'un peut nous aider avec elle.

+0

Avez-vous trouvé une solution à ce problème? J'essaie d'atteindre exactement la même chose. – abalogh

Répondre

0

J'ai réussi à le faire fonctionner, cela ne répond pas exactement à votre question spécifique, mais l'idée originale; avoir une couverture produite par jacoco pour les tests de junit dans une construction de gant. Je ne pouvais pas obtenir le jacoco: la couverture fonctionnait donc je l'ai fait avec l'agent jacoco; quelque chose comme ceci:

Configuration de l'agent:

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') 

...

et à ce stade, nous devons passer le agentvmparam à la machine virtuelle Java junit en cours d'exécution;

jvmarg(value:"${agentvmparam}") 

Et ça fonctionne comme un charme.

Questions connexes