Как запустить одиночный unit test с помощью gradle обертки 2.2.1 из командной строки
Используя студию Android с оболочкой gradle версии 2.2.1, я пытаюсь запустить все тесты в одном тестовом классе, а также специальный тест внутри этого класса и попытался использовать:
./gradlew test --tests DownloadsActivityTest
как предлагает документация, а также
-DandroidTest.single=DownloadsActivityTest
Но ни одна из этих версий не работает.
Как запустить один тестовый класс и один тест из командной строки с помощью оболочки gradle?
./gradlew --version
------------------------------------------------------------
Gradle 2.2.1
------------------------------------------------------------
Build time: 2014-11-24 09:45:35 UTC
Build number: none
Revision: 6fcb59c06f43a4e6b1bcb401f7686a8601a1fb4a
Groovy: 2.3.6
Ant: Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM: 1.7.0_51 (Oracle Corporation 24.51-b03)
OS: Linux 3.17.6-200.fc20.x86_64 amd64
[16:33][[email protected]:~/myHomeDir]$ ./gradlew test --tests DownloadsActivityTest
WARNING: Dependency commons-logging:commons-logging:1.1.1 is ignored for debugTest as it may be conflicting with the internal version provided by Android.
In case of problem, please repackage it with jarjar to change the class packages
WARNING: Dependency org.apache.httpcomponents:httpclient:4.0.3 is ignored for debugTest as it may be conflicting with the internal version provided by Android.
In case of problem, please repackage it with jarjar to change the class packages
FAILURE: Build failed with an exception.
* What went wrong:
Problem configuring task :app:test from command line.
> Unknown command-line option '--tests'.
* Try:
Run gradlew help --task :app:test to get task usage details. Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 4.466 secs
Ответы
Ответ 1
Плагин Android Gradle, начиная с 1.0.0, не имеет поддержки для запуска одиночных тестов на Android. Запрос функции для него подан в https://code.google.com/p/android/issues/detail?id=74196.
Я знаю, что лучшая поддержка тестирования в целом очень высока в списке приоритетов после 1.0, но я не могу сказать с уверенностью, когда это будет реализовано.
Ответ 2
Чтобы выполнить только те тесты инструментария (androidTests) в определенном тестовом классе, выполните:
./gradlew app:connectedAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.android.testing.blueprint.ui.espresso.EspressoTest
Чтобы выполнить только те тесты локальные ( "единица", тесты JVM) в конкретном тестовом классе или пакете выполните:
./gradlew :app:testDebugUnitTest --tests "com.example.android.testing.blueprint.unit.integrationTests.*"
Ответ 3
./gradlew :<module name>:test<CapitalCasedBuildVariant> --tests "<Test name pattern>"
Важно указать имя модуля, в котором проходит тест, в противном случае, когда gradle строит зависимые модули, он попытается их протестировать и может выйти из строя, потому что ни один из тестов не соответствует тестовому шаблону:
No tests found for given includes: [FooTest]
Кроме того, если вы не укажете полностью-квалифицированное имя (FQN
) теста, шаблон тестового имени должен начинаться с *
.
В моем случае у меня есть модуль с именем app
и вариант с именем localDebug
, и я хотел протестировать FooTest
, поэтому я побежал:
./gradlew :app:testLocalDebug --tests "*FooTest"
Ответ 4
Это поддерживается в Android Studio 1.1, используя плагин Android Gradle v1.1.0.
Следуйте руководству здесь