Сценарий сборки Gant, как получить задачу, которую я хочу выполнить
-
27-10-2019 - |
Вопрос
Это есть в 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() была добавлена к ней как дочерняя задача.Ему нужно "обернуть" задачу для запуска тестов.XML-эквивалент Ant для того, что я пытаюсь сделать, заключается в следующем:
<jacoco:coverage>
<taskToRunTheTests ... >
< ... setup ... >
</taskToRunTheTests>
</jacoco:coverage>
Итак, я предполагаю, что я ищу способ, в Gant, получить задачу из определения цели и передать ее задаче покрытия (я могу выполнить coverageTask.addChild(theRunTestsTask) ...coverageTask.выполнить() при необходимости).
Это малоизвестный вопрос, надеюсь, кто-нибудь сможет нам с ним помочь.
Решение
Мне удалось заставить это работать, это не совсем ответ на ваш конкретный вопрос, но на оригинальную идею;иметь созданное jacoco покрытие для тестов junit в рамках сборки gant.Я не смог заставить 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
к JVM, работающей под управлением junit;
jvmarg(value:"${agentvmparam}")
И это работает как по волшебству.