Как запустить Gradle test, когда все тесты обновлены?



у меня есть мой сценарий оценки настроен.
Когда я выполняю сборку 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 build работает, конечно...
Я хочу иметь возможность сбросить только тесты, а не строить весь проект: как я должен это сделать?

864   7  

7 ответов:

один из вариантов будет использовать --rerun-tasks флаг в командная строка. Это приведет к повторному запуску всей тестовой задачи и всех задач, от которых она зависит.

если вы заинтересованы только в повторном запуске тестов, то другой вариант будет сделать gradle очистить результаты тестов перед выполнением тестов. Это можно сделать с помощью cleanTest задач.

некоторый фон-плагин Java определяет чистые задачи для каждой из других задач. По данным документация:

cleanTaskName - удаляет файлы, созданные указанных задач. cleanJar будет удалить файл jar создан целевой банку, и cleanTest будет удалить результаты испытаний созданного тестового задания.

поэтому все, что вам нужно для повторного запуска тестов, это также запустить cleanTest задач, т. е.:
gradle cleanTest test

другой вариант-добавить следующее в вашу сборку.Gradle в:

test.outputs.upToDateWhen {false}

gradle test --rerun-tasks

указывает, что любая оптимизация задачи игнорируется.

Источник:https://gradle.org/docs/current/userguide/gradle_command_line.html

вот решение с помощью "построить.файл "gradle", если вы не хотите изменять свою командную строку:

test {
    dependsOn 'cleanTest'
    //Your previous task details (if any)
}

и вот результат. Обратите внимание на 2 изменения от вашего предыдущего вывода:

1) в выходных данных появляется новая задача "cleanTest".

2) 'test' всегда очищается (т. е. никогда 'до даты'), поэтому он выполняется каждый раз:

$ gradle build
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:findMainClass
:jar
:bootRepackage
:assemble
:cleanTest
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test
:check
:build

также, нужно добавить --rerun-tasks Это действительно избыточно. Никогда не случаться. Создайте --no-rerun-tasks и сделать --rerun-tasks по умолчанию, когда cleanTask

недавно была тема на Gradle в блог остановка повторный запуск тестов. Элемент автор показывает пример использования outputs.upToDateWhen { false } и объясняет, почему это не так:

это на самом деле не заставляет повторы

то, что автор этого фрагмента, вероятно, хотел сказать: "всегда повторяйте мои тесты". Это не то, что делает этот фрагмент. Он будет только отмечать задачу устаревшей, заставляя Gradle заново выход. Но вот что, если кэш сборки включен, Gradle не нужно запускать задачу для воссоздания вывода. Он найдет запись в кэш и распакуйте в каталог теста.

то же самое верно для Этот фрагмент:

test.dependsOn cleanTest

Gradle распакует результаты теста из кэша сборки после очистки вывода,поэтому ничего не будет перезапущено. Короче говоря, эти фрагменты создают очень дорогих нет.

если вы сейчас думаете "хорошо, я тоже отключу кэш", позвольте мне сказать вам, почему вы не должны.

затем автор продолжает объяснять, почему повторное выполнение некоторых тестов является пустой тратой времени:

подавляющее большинство ваших тестов должны быть детерминированными, т. е. при одинаковых входных данных они должны давать одинаковый результат.

в тех немногих случаях, когда вы хотите повторить тесты, где код не имеет изменено, вы должны моделировать их в качестве входных данных. Вот оба примера из сообщения в блоге, которые показывают добавление ввода, поэтому задача будет использовать его во время своих последних проверок.

task randomizedTest(type: Test) {
  systemProperty "random.testing.seed", new Random().nextInt()
}

task systemIntegrationTest(type: Test) {
  inputs.property "integration.date", LocalDate.now()
}

Я рекомендую прочитать весь пост в блоге.

Я думаю, что это правильный вопрос, учитывая, что в Gradle можно запустить эту команду test, и что происходит, что ничего не происходит!

но я бы поставил под сомнение необходимость когда-либо делать это, как сказал Джолта в своем комментарии: если код не изменился, зачем вам нужно повторно тестировать? Если у вас есть сомнения по поводу сторонних входных данных, я бы сказал, что вам нужно удовлетворить это в своем коде приложения. Если у вас есть опасения, что ваш код может быть "аспидным", то есть возможность пройти все тесты, но не во-вторых (или в сотый раз), вам не нужно думать о том, почему у вас есть эти сомнения, и решать их?

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

Comments

    Ничего не найдено.