Запустите все тесты JUnit с помощью Gradle

У меня есть приложение Java, которое использует Gradle в качестве системы сборки. Это многопроектная сборка (несколько Java-проектов).

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

Если я добавлю следующий код в build.gradle, он выполнит все тесты, но, конечно, сборка всегда завершается успешно:

test {
    ignoreFailures = true
}

У меня два вопроса:

  1. Прекращает ли gradle выполнение тестов после первого сбоя?
  2. Есть ли способ запустить все тесты (даже если некоторые из них терпят неудачу) и все равно получить сбой сборки, если некоторые из них не удались?
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
4 722
2

Ответы 2

Убедитесь, что вы запускаете тесты из корня вашего проекта.

Задача test является частью подключаемого модуля Java для Gradle. Согласно официальной документации:

Выполнение проектов с большими наборами тестов может занять много времени, даже если сбой произошел на ранней стадии, что привело к ненужному времени ожидания (особенно в CI). Чтобы сократить такое поведение, свойство Test.getFailFast () позволяет вызвать сбой тестовой задачи после первого сбоя теста вместо выполнения всех тестов. Если это свойство истинно, в результирующих выходных данных будут показаны только результаты тестов, которые завершились до сбоя включительно. Чтобы включить эту функцию быстрого сбоя в файле сборки, установите для свойства failFast значение true:

test {
    failFast = true
}

Параметр командной строки --fail-fast включает поведение из командной строки. Вызов выглядит так:

gradle test --fail-fast

Значение по умолчанию для свойства failFast - false.

Официальную документацию можно найти здесь.

Итак, чтобы ответить на ваши вопросы:

  1. По умолчанию Gradle не прекращает выполнение тестов после первого сбоя. Это поведение можно изменить с помощью свойства failFast.

  2. Поведение по умолчанию должно помочь. При запуске gradle test будут запущены все тесты. Если какой-либо из них выйдет из строя, сборка не удастся. Поскольку у вас многопроектная сборка, убедитесь, что вы запускаете Gradle из корневого проекта.

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

Ido Ran 11.03.2018 19:24

@IdoRan, пожалуйста, дайте нам знать, в чем проблема (как только вы ее решите). Кроме того, вы можете принять этот ответ, если он ответил на все ваши вопросы.

Damir Alibegovic 11.03.2018 19:45

Gradle предлагает параметр --continue gradlew build --continue, который выполняет все задачи независимо от их успеха. Однако, если какая-либо выполненная задача не удалась, вся сборка помечается как неудачная.

Я думаю, вы ищете этот переключатель.

Другие вопросы по теме