Выполнение тестов блока Android в командной строке?
Я пытаюсь запустить модульные тесты на платформе Android в соответствии с учебником. Скажем, например, я хочу запустить тесты для приложения электронной почты. Я открываю файл /apps/Email/tests/AndroidManifest.xml
, ища элемент <manifest>
, и смотрю атрибут package
, который является com.android.email.tests
, а в элементе <instrumentation>
я смотрю атрибут android:name
, который равен android.test.InstrumentationTestRunner
> . Теперь я открываю консоль и запускаю
$ . build/envsetup.sh
$ lunch 1
$ adb shell am instrument -w com.android.email.tests/android.test.InstrumentationTestRunner
Но это не удается:
INSTRUMENTATION_STATUS: id=ActivityManagerService
android.util.AndroidException: INSTRUMENTATION_FAILED: com.android.email.tests/android.test.InstrumentationTestRunner
INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfo{com.android.email.tests/android.test.InstrumentationTestRunner}
Итак... Что я делаю неправильно?
Ответы
Ответ 1
Запустите
разработка python/testrunner/runtest.py электронная почта
и вы увидите, что оно работает:).
В принципе у вас нет пакета com.android.email.tests.
Вы можете увидеть, что доступно для инструментария
pm list instrumentation
И вы должны увидеть
приборы: com.android.email.tests/android.test.InstrumentationTestRunner(Цель = com.android.email)
И при выполнении
pm list packages
пакет: com.android.email
пакет: com.android.email.tests
Ответ 2
Вам может потребоваться сначала настроить тестовый проект с помощью команды android create test-project
. Проверьте эту страницу на сайте Android Dev: Тестирование в других IDE для получения дополнительной информации. Я использовал этот метод для включения тестирования командной строки с помощью ant.
Ответ 3
То, что я на самом деле забыл сделать, это сборка и установка этих тестовых пакетов на мое устройство/эмулятор. Обнаружил, что после:
$ adb shell
# cd data/packages
# ls
И нет пакета com.android.email.tests
.
Ответ 4
Моя проблема была в этом теге:
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:label="Tests for app.under.test.package"
android:targetPackage="app.under.test.package" />
Во-первых, у меня был атрибут android:name
, но неверный целевой пакет (выше - правильное решение)
Ответ 5
тестовый пакет, не установленный на эмуляторе
У меня была такая же проблема и я понял, что тестовый пакет не был установлен на эмуляторе, что и говорит @marekdef.
Вместо использования команды, найденной в сгенерированном тестовом файле, я использовал следующее:
ant debug install test
* У меня был тестовый проект в <project_home>/tests
, поэтому следующая команда - это то, что я закончил с помощью моего проекта home:
(cd tests && ant debug install test;)
Надеюсь, что это поможет.
Ответ 6
В этом условии я получил сообщение "Не удалось найти информацию об оборудовании": я определил свой тестовый проект с именем пакета src, которое было таким же, как и при тестировании проекта. Например, источником для обоих проектов был пакет com.mycompany.android. Эта настройка parallel-src-package отлично работала в Eclipse, но на эмуляторе очень показалось, что тест apk перезаписывал приложение apk.
Исправлено: я изменил пакет src тестового проекта на test.mycompany.android.
Обратите внимание, что в любом случае манифест Android для тестового проекта определяет:
< manifest package = "pkg-of-project-under-test"... >
и
< инструментарий android: targetPackage = "pkg-of-project-under-test"... >
Ответ 7
Для пользователя gradle вы можете использовать следующие задачи:
$ gradle :project:installDebug :project:installDebugAndroidTest