Я новичок в Gradle. Я использую Gradle 1.10 и Ubuntu 13.
Я хочу знать, есть ли какая-либо команда для выполнения только одного локального тестового класса, похожая на 'testonly' в SBT.
Я новичок в Gradle. Я использую Gradle 1.10 и Ubuntu 13.
Я хочу знать, есть ли какая-либо команда для выполнения только одного локального тестового класса, похожая на 'testonly' в SBT.
Ответы:
Для запуска одного теста класса 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
для вызова одного метода тестирования внутри класса, мы видим итерацию по всем классам, даже всем, которые не запускаются, что слишком медленно. Не знаю, является ли эта медлительность нашей средой или это повлияет на других. Можно обновить, если найдете больше.
Вы можете сделать это, 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
чтобы предотвратить перестроение зависимостей, и, в свою очередь, быстрее выполнить этот единственный тест.
Если у вас есть многомодульный проект:
позвольте нам сказать, что ваша структура модуля
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-модуле нет ничего, соответствующего шаблону выше.
./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
командной строки:
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
В моем случае мои предупреждения компилятора Java Eclipse были установлены слишком высоко, и Eclipse не распознал мой класс как допустимый для выполнения. Обновление настроек моего компилятора устранило проблему. Вы можете прочитать больше об этом здесь: annotation-nonnull-not-be-resolved