Учитывая ответы, должно быть ясно, что речь идет о локальных тестах, а не о инструментальных тестах. Android / Gradle сбивает с толку, называя эти локальные тесты «юнит-тестами».
tir38
Ответы:
562
Для запуска одного теста класса 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аргумент будет не поддерживаться, и вы получите ошибку.
подход фильтра, вероятно, также может быть объединен с правилами задач для некоторого удобного выбора теста
Мэтт Уиппл
Для больших наборов тестов, даже если вы используете --testsдля вызова одного метода тестирования внутри класса, мы видим итерацию по всем классам, даже всем, которые не запускаются, что слишком медленно. Не знаю, является ли эта медлительность нашей средой или это повлияет на других. Можно обновить, если найдете больше.
arntg
185
Вы можете сделать это, gradle -Dtest.single=ClassUnderTestTest testесли хотите протестировать отдельный класс или использовать регулярное выражение, как, например, gradle -Dtest.single=ClassName*Test testвы можете найти больше примеров фильтрации классов для тестов в этом разделе 23.12 ссылки . Тестовое задание.
Последние версии (начиная с 1.10 или около того) поддерживают параметр --testsкомандной строки, который устанавливается для замены -DtestTaskName.single.
Питер Нидервизер
58
С помощью этой --testопции вы также можете ограничить тестирование одним методом в своем классе тестирования. Например: gradle test --tests *MyTest.someMethod запустит только один тест someMethodв вашем MyTestклассе. Когда я создаю тестовый пример, я обычно запускаю один метод за раз, чтобы упростить фокусировку только на выводе, который мне нужен для отладки, а затем запускаю весь тестовый пример в конце.
Джефф Френч
10
Также стоит отметить, что если вы хотите запустить один тест в многомодульном проекте, то команда is gradle -D:submodule:test.single=ClassUnderTestTest :submodule:test. Смотрите это обсуждение на gradle.org
Булат
2
Возможно, вы также захотите использовать --no-rebuildопцию, например, gradle -D:submodule:test.single=ClassUnderTestTest --no-rebuild :submodule:testчтобы предотвратить перестроение зависимостей, и, в свою очередь, быстрее выполнить этот единственный тест.
Falconepl
2
Этот вариант не рекомендуется использовать в Gradle 5
Eyal
108
Если у вас есть многомодульный проект:
позвольте нам сказать, что ваша структура модуля
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-модуле, и, наконец, вы можете передать параметр вышеупомянутой задаче для запуска тестов, которые соответствуют определенному шаблону пути
эта команда не работает для меня. > Ошибка: неизвестный параметр командной строки '--tests'
Tarkik
32
Обратите внимание, что --testsопция может не работать, если у вас другая сборка types/flavors(не работает с Unknown command-line option '--tests'). В этом случае необходимо указать конкретное тестовое задание (например, testProdReleaseUnitTestвместо просто test)
Можете ли вы привести полный пример? Я пытаюсь запустить 3 теста, которые соответствуют символу подстановки, ./gradlew test --tests *testMyCollectionTake*и я не могу сказать, как мне заменить testего именем с подстановочными знаками
DanielCuadra
4
Ниже приведена команда для запуска одного тестового класса с использованием параметра gradlewкомандной строки:
В моем случае мои предупреждения компилятора Java Eclipse были установлены слишком высоко, и Eclipse не распознал мой класс как допустимый для выполнения. Обновление настроек моего компилятора устранило проблему. Вы можете прочитать больше об этом здесь: annotation-nonnull-not-be-resolved
Ответы:
Для запуска одного теста класса Airborn ответ хорош.
Используя некоторые параметры командной строки, которые можно найти здесь , вы можете просто сделать что-то вроде этого.
Начиная с версии 1.10 Gradle поддерживает выбор тестов, используя тестовый фильтр . Например,
Для сред с несколькими вкусами (распространенный вариант использования для Android) проверьте этот ответ , так как
--tests
аргумент будет не поддерживаться, и вы получите ошибку.источник
--tests
для вызова одного метода тестирования внутри класса, мы видим итерацию по всем классам, даже всем, которые не запускаются, что слишком медленно. Не знаю, является ли эта медлительность нашей средой или это повлияет на других. Можно обновить, если найдете больше.Вы можете сделать это,
gradle -Dtest.single=ClassUnderTestTest test
если хотите протестировать отдельный класс или использовать регулярное выражение, как, например,gradle -Dtest.single=ClassName*Test test
вы можете найти больше примеров фильтрации классов для тестов в этом разделе 23.12 ссылки . Тестовое задание.источник
--tests
командной строки, который устанавливается для замены-DtestTaskName.single
.--test
опции вы также можете ограничить тестирование одним методом в своем классе тестирования. Например:gradle test --tests *MyTest.someMethod
запустит только один тестsomeMethod
в вашемMyTest
классе. Когда я создаю тестовый пример, я обычно запускаю один метод за раз, чтобы упростить фокусировку только на выводе, который мне нужен для отладки, а затем запускаю весь тестовый пример в конце.gradle -D:submodule:test.single=ClassUnderTestTest :submodule:test
. Смотрите это обсуждение на gradle.org--no-rebuild
опцию, например,gradle -D:submodule:test.single=ClassUnderTestTest --no-rebuild :submodule:test
чтобы предотвратить перестроение зависимостей, и, в свою очередь, быстрее выполнить этот единственный тест.Если у вас есть многомодульный проект:
позвольте нам сказать, что ваша структура модуля
и тест (testToRun), который вы хотите запустить, находится в b-модуле с полным путем: com.xyz.b.module.TestClass.testToRun
Как и здесь, вы заинтересованы в запуске теста в b-модуле, поэтому вы должны увидеть задачи, доступные для b-модуля.
Приведенная выше команда перечислит все задачи в b-модуле с описанием. И в идеальном случае у вас будет задача с именем test для запуска модульных тестов в этом модуле.
Теперь вы достигли точки для запуска всех тестов в b-модуле, и, наконец, вы можете передать параметр вышеупомянутой задаче для запуска тестов, которые соответствуют определенному шаблону пути
Теперь вместо этого, если вы запустите
./gradlew test --tests "com.xyz.b.module.TestClass.testToRun"
Он запустит тестовое задание как для модуля a, так и для b, что может привести к сбою, поскольку в a-модуле нет ничего, соответствующего шаблону выше.
источник
./gradlew :b-module:test --tests testToRun
После долгих размышлений у меня сработало следующее:
gradle test --tests "a.b.c.MyTestFile.mySingleTest"
источник
Обратите внимание, что
--tests
опция может не работать, если у вас другая сборкаtypes/flavors
(не работает сUnknown command-line option '--tests'
). В этом случае необходимо указать конкретное тестовое задание (например,testProdReleaseUnitTest
вместо простоtest
)источник
./gradlew test --tests *testMyCollectionTake*
и я не могу сказать, как мне заменитьtest
его именем с подстановочными знакамиНиже приведена команда для запуска одного тестового класса с использованием параметра
gradlew
командной строки:Ниже приведен пример запуска класса
com.example.TestClass
с вариантомVariant_1
:источник
Вы должны попытаться добавить звездочки (*) до конца.
источник
Запустите один тест под названием MyTest:
источник
В моем случае мои предупреждения компилятора Java Eclipse были установлены слишком высоко, и Eclipse не распознал мой класс как допустимый для выполнения. Обновление настроек моего компилятора устранило проблему. Вы можете прочитать больше об этом здесь: annotation-nonnull-not-be-resolved
источник