Выполнение тестов блока 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