it-roy-ru.com

Как запустить только один тестовый класс на Gradle

Я новичок в Gradle. Я использую Gradle 1.10 и Ubuntu 13. 

Я хочу знать, есть ли какая-либо команда для выполнения только одного тестового класса, похожая на 'testonly' в SBT.

279
bula

Для запуска одного теста класса Airborn ответ хорош.

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

gradle test --tests org.gradle.SomeTest.someSpecificFeature
gradle test --tests *SomeTest.someSpecificFeature
gradle test --tests *SomeSpecificTest
gradle test --tests all.in.specific.package*
gradle test --tests *IntegTest
gradle test --tests *IntegTest*ui*
gradle test --tests *IntegTest.singleMethod
gradle someTestTask --tests *UiTest someOtherTestTask --tests *WebTest*ui

Начиная с версии 1.10 Gradle поддерживает выбор тестов, используя тестовый фильтр . Например,

apply plugin: 'Java'

test {
  filter {
    //specific test method
      includeTestsMatching "org.gradle.SomeTest.someSpecificFeature"

     //specific test method, use wildcard for packages
     includeTestsMatching "*SomeTest.someSpecificFeature"

     //specific test class
     includeTestsMatching "org.gradle.SomeTest"

     //specific test class, wildcard for packages
     includeTestsMatching "*.SomeTest"

     //all classes in package, recursively
     includeTestsMatching "com.gradle.tooling.*"

     //all integration tests, by naming convention
      includeTestsMatching "*IntegTest"

     //only ui tests from integration tests, by some naming convention
     includeTestsMatching "*IntegTest*ui"
   }
}

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

349
Maleen Abewardana

Вы можете сделать gradle -Dtest.single=ClassUnderTestTest test, если вы хотите протестировать отдельный класс или использовать регулярное выражение, например gradle -Dtest.single=ClassName*Test test, вы можете найти больше примеров классов фильтрации для тестов по этой ссылке раздел 23.12. Тестовое задание

161
airborn

Если у вас есть многомодульный проект:

позвольте нам сказать, что ваша структура модуля

root-module
 -> a-module
 -> b-module

и тест (testToRun), который вы хотите запустить, находится в b-модуле с полным путем: com.xyz.b.module.TestClass.testToRun

Так как здесь вам интересно запустить тест в b-модуле, вы должны увидеть задачи, доступные для b-модуля.

./gradlew :b-module:tasks

Приведенная выше команда перечислит все задачи в b-модуле с описанием. И в идеальном случае у вас будет задача с именем test для запуска модульных тестов в этом модуле.

./gradlew :b-module:test

Теперь вы достигли точки для запуска всех тестов в b-модуле, и, наконец, вы можете передать параметр вышеупомянутой задаче для запуска тестов, которые соответствуют определенному шаблону пути

./gradlew :b-module:test --tests "com.xyz.b.module.TestClass.testToRun"

Теперь вместо этого, если вы запустите

./gradlew test --tests "com.xyz.b.module.TestClass.testToRun"

Он запустит тестовое задание как для модуля a, так и для b, что может привести к сбою, поскольку в a-модуле нет ничего, соответствующего шаблону выше.

76
greperror

После долгих размышлений у меня сработало следующее:

gradle test --tests "a.b.c.MyTestFile.mySingleTest"

22
Pratik Khadloya

Обратите внимание, что опция --tests может не работать, если у вас есть разные варианты (не работает с "Неизвестный параметр командной строки '--tests'"). В этом случае необходимо указать конкретное тестовое задание (например, «testProdReleaseUnitTest» вместо просто «test»)

12
anagaf

Ниже приведена команда для запуска одного тестового класса с использованием параметра командной строки gradlew:

gradlew.bat Connected**your bundleVariant**AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass

Ниже приведен пример запуска класса com.example.TestClass с вариантом Variant_1:

gradlew.bat ConnectedVariant_1AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass 
0
Naveenprasanth Duraisamy

В моем случае мои предупреждения компилятора Java Eclipse были установлены слишком высоко, и Eclipse не распознал мой класс как допустимый для выполнения. Обновление настроек моего компилятора устранило проблему. Вы можете прочитать больше об этом здесь: annotation-nonnull-not-be-resolved

0
Greg