Как запустить одиночный 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.

Следуйте руководству здесь