Я новачок у 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
якщо ви хочете протестувати один клас або використовувати regexp, як 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-модулі з описом. І в ідеальному випадку у вас буде завдання з ім'ям тесту для запуску одиничних тестів у цьому модулі.
./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-неможливо вирішити