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

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

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

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

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

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


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


Ответы (3)


arrow_upward
2
arrow_downward

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

привет, Рене

person Rene Groeschke    schedule 28.09.2012

arrow_upward
2
arrow_downward

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

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

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

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

person dty    schedule 01.10.2012

arrow_upward
0
arrow_downward

Вам необходимо создать тестовые задачи в вашем 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