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

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

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

Ответ 1

Для запуска одного тестового класса ответ 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 градиента он поддерживает выбор тестов, используя тестовый фильтр. Например,

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 будет неподдерживаться, и вы получите сообщение об ошибке.

Ответ 2

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

Ответ 3

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

скажем, что ваша структура модуля

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-модуле нет ничего соответствующего шаблону.

Ответ 4

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

gradle test --tests "abcMyTestFile.mySingleTest"

Ответ 5

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

Ответ 6

Ниже приведена команда запуска одного тестового класса с использованием gradlew командной строки 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 

Ответ 7

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

Ответ 8

Вы должны попытаться добавить звездочки (*) до конца.

Gradle Test --tests "com.abc *"

Ответ 9

Запустите один тест под названием MyTest:

./gradlew app:testDebug --tests=com.example.MyTest