У меня настроен сценарий оценки. Когда я выполняю сборку Gradle, все работает и запускает тесты jUnit.
После этого, когда я запускаю тест Gradle, я получаю следующее:
C:\Users\..\..\Project>gradle test
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
Когда я выполняю gradle clean
, сборка Gradle, конечно, работает ... Я хочу иметь возможность сбрасывать только тесты, а не собирать весь проект: как мне это сделать?
java
gradle
build.gradle
USer22999299
источник
источник
Ответы:
Один из вариантов - использовать
--rerun-tasks
флаг в командной строке . Это приведет к повторному запуску всей тестовой задачи и всех задач, от которых она зависит.Если вас интересует только повторный запуск тестов, то другой вариант - заставить gradle очищать результаты тестов перед выполнением тестов. Это можно сделать с помощью
cleanTest
задания.Немного предыстории - плагин Java определяет чистые задачи для каждой из других задач. Согласно документации :
Следовательно, все, что вам нужно для повторного запуска тестов, - это также запустить
cleanTest
задачу, то есть:gradle cleanTest test
источник
gradle cleanTest test
не перезапускает тесты, он очищает их вывод, ноtest
задача все равно будет получать результаты теста из кеша - см. github.com/gradle/gradle/issues/9153--no-build-cache
, то будет работать как положено, напримерgradle cleanTest test --no-build-cache
.Другой вариант - добавить в build.gradle следующее:
источник
funcTest
задачи, которую создал для выполнения функциональных тестов.upToDateWhen
Может быть использован в любой «кода управляемой» , как например, системные свойства, переменные окружения, свойства проекта и т.д.gradle test -Prerun-tests
. Код в build.gradle:if(project.hasProperty("rerun-tests")) { test.outputs.upToDateWhen {false} }
gradle test --rerun-tasks
Источник: https://gradle.org/docs/current/userguide/gradle_command_line.html
источник
Это недавно была тема в блоге Gradle. Прекратите повторный запуск тестов . Автор показывает пример использования
outputs.upToDateWhen { false }
и объясняет , почему это не так:Затем автор объясняет, почему повторный запуск некоторых тестов - пустая трата времени:
В тех немногих случаях, когда вы действительно хотите повторно запустить тесты, код которых не изменился, вы должны смоделировать их как входные. Вот оба примера из сообщения в блоге, в которых показано добавление ввода, чтобы задача использовала его во время проверки актуальности.
Я рекомендую прочитать весь пост в блоге.
источник
Вот решение, использующее файл "build.gradle" на случай, если вы не хотите изменять свою командную строку:
И вот результат. Обратите внимание на 2 изменения по сравнению с предыдущим выводом:
1) На выходе появляется новая задача cleanTest.
2) 'test' всегда очищается (т.е. никогда не 'UP-TO-DATE'), поэтому он выполняется каждый раз:
источник
cleanTest
неtest
будет повторно запускать тесты, он очищает их выходные данные, но тестовая задача по-прежнему будет получать результаты теста из кеша - см. github.com/gradle/gradle/issues/9153--rerun-tasks
работает, но неэффективно, поскольку повторно выполняет все задачи.cleanTest
сам по себе может не хватить из-за кеша сборки.Итак, лучший способ добиться этого:
источник
Кроме того, необходимость добавления
--rerun-tasks
действительно избыточна. Никогда не бывает. Создать--no-rerun-tasks
и использовать по--rerun-tasks
умолчанию, когдаcleanTask
источник
TL; DR
источник
Я думаю, что это правильный вопрос, учитывая, что в Gradle можно запустить эту команду
test
, и что происходит, так это то, что ничего не происходит!Но я бы поставил под сомнение необходимость когда-либо делать это, как сказал Джолта в своем комментарии: если код не изменился, зачем вам повторное тестирование? Если у вас есть сомнения относительно стороннего ввода, я бы сказал, что вам нужно учесть это в своем коде приложения. Если вас беспокоит, что ваш код может быть "нестабильным", т.е. может пройти все тесты с первого раза, но не во второй (или сотый), разве вам не нужно думать о том, почему у вас есть эти сомнения, и устранять их?
Лично я считаю, что это (очень незначительная) ошибка дизайна в Gradle: если все полностью обновлено, вместо того, чтобы идти «СОЗДАТЬ УСПЕШНО», должно быть сказано «БЕЗ ИЗМЕНЕНИЙ С ПОСЛЕ ПОСЛЕДНЕЙ УСПЕШНОЙ СБОРКИ: НИЧЕГО НЕ СДЕЛАНО».
источник