Почему мои тесты Gradle запускаются повторно?

У меня довольно стандартная сборка Gradle, которая создает проект Java.

Когда я запускаю его в первый раз, он все компилирует и запускает тесты. Когда я запускаю его второй раз, не меняя файлов, он снова запускает тесты.

Согласно в этой ветке, Gradle по умолчанию должен быть ленивым и не беспокоиться о запуске тестов, если ничего не изменилось. Изменилось ли здесь поведение по умолчанию?

РЕДАКТИРОВАТЬ:

Если я запускаю gradle test несколько раз, тесты запускаются только в первый раз и впоследствии пропускаются. Однако, если я запускаю gradle build несколько раз, тесты каждый раз запускаются повторно, даже если все другие задачи отмечены как актуальные.


person dty    schedule 28.09.2012    source источник


Ответы (3)


проверка обновлений gradle регистрирует на информационном уровне, почему задача не считается актуальной. пожалуйста, перезапустите "gradle build -i" для запуска с регистрацией информации при проверке вывода журнала.

привет, Рене

person Rene Groeschke    schedule 28.09.2012

Хорошо, поэтому я получил ответ благодаря тому, что Рене побудил меня посмотреть на вывод '-i' ...

На самом деле у меня есть 2 тестовых задания: «тестовая» из плагина Java и моя собственная «integrationTest». Я не упомянул об этом в вопросе, потому что не думал, что это актуально.

Оказывается, эти задачи записывают свои выходные данные (отчеты и т. Д.) В один и тот же каталог, поэтому отслеживание ввода и вывода на основе задач Gradle считало, что что-то изменилось, и повторно запускало тесты.

Итак, следующий вопрос (который я задам отдельно) становится следующим: как чисто (и с минимальным кодом Groovy / Gradle) полностью разделить два экземпляра тестовой задачи.

person dty    schedule 01.10.2012

Вам необходимо создать тестовые задачи в вашем build.gradle, а затем вызвать эти конкретные задачи для запуска определенного набора тестов. Вот пример, который отфильтрует классы, чтобы они не запускались дважды (например, при запуске набора и последующем повторном запуске его дочерних классов независимо):

tasks.withType(Test) {
    jvmArgs '-Xms128m', '-Xmx1024m', '-XX:MaxPermSize=128m'
    maxParallelForks = 4  // this runs tests parallel if more than one class
    testLogging {
        exceptionFormat "full"
        events "started", "passed", "skipped", "failed", "standardOut", "standardError"
        displayGranularity = 0
    }   
}
task runAllTests(type: Test) {
    include '**/AllTests.class'
    testReportDir = file("${reporting.baseDir}/AllTests")
    testResultsDir = file("${buildDir}/test-results/AllTests")
}
task runSkipSuite(type: Test) {
    include '**/Test*.class'
    testReportDir = file("${reporting.baseDir}/Tests")
    testResultsDir = file("${buildDir}/test-results/Tests")
}

Также по поводу вашего вопроса о сборке. Задача «сборки» включает в себя этап очистки, который заключается в очистке тестов из каталога сборки. В противном случае выполнение считает, что тесты уже выполнены.

person djangofan    schedule 26.02.2013