Как запустить тесты Android в эмуляторе с помощью IntelliJ? - PullRequest
0 голосов
/ 20 января 2012

Я пытаюсь запустить образец модульных тестов для примера кода, который поставляется с Android SDK.Некоторые тесты выполняются как стандартные модульные тесты, без проблем.Другие тесты, такие как com.example.android.apis.view.Focus2AndroidTest, используют классы Android и, следовательно, должны запускаться в эмуляторе, что является проблемой.

Я могу нормально запускать приложения в моем эмуляторе,Когда я запускаю тесты, мой эмулятор запускается, а затем просто сидит там.Тест никогда не запускается.Все, что я вижу в окне вывода в IntelliJ, это

Waiting for device.
/Users/rfzabick/android-sdk-mac_x86/tools/emulator -avd MyAvd0 -netspeed full -netdelay none
Device connected: emulator-5554

Что я делаю не так?

РЕДАКТИРОВАТЬ: После рекомендации @ CrazyCoder я переключился на Android 4.0.3 (API 15).Вот что я получил: Тестирование началось в 16:34 ...

Waiting for device.
/Users/rfzabick/android-sdk-mac_x86/tools/emulator -avd android4.0.3--api15 -netspeed full -netdelay none -wipe-data -no-boot-anim
Device connected: emulator-5554
Device is online: emulator-5554
Target device: emulator-5554 (android4.0.3--api15)
Uploading file
    local path: /Users/rfzabick/IdeaProjects/ApiDemos/out/production/Tests/Tests.apk
    remote path: /data/local/tmp/com.example.android.apis.tests
Installing com.example.android.apis.tests
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/com.example.android.apis.tests"
Device is not ready. Waiting for 20 sec.
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/com.example.android.apis.tests"
Device is not ready. Waiting for 20 sec.
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/com.example.android.apis.tests"
Device disconnected: emulator-5554
pkg: /data/local/tmp/com.example.android.apis.tests


Running tests
Test running startedTest running failed: com.android.ddmlib.AdbCommandRejectedException: device not found
Empty test suite.

Единственное, что я вижу в logcat, это

01-21 16:36:22.047: WARN/ActivityManager(91): No content provider found for permission revoke: file:///data/local/tmp/com.example.android.apis.tests

Ответы [ 3 ]

2 голосов
/ 20 января 2012

Можно ли запускать обычные приложения в эмуляторе или на USB-устройстве?Попробуйте создать новое устройство эмулятора и посмотрите, поможет ли это.

Я пробовал его на платформе Android IDEA 11.0.1, 4.0.3 на Windows, и он отлично работает:

Waiting for device.
Target device: emulator-5554 (ICS)
Uploading file
    local path: D:\dev\android-sdk-windows\samples\android-15\ApiDemos\out\production\Tests\Tests.apk
    remote path: /data/local/tmp/com.example.android.apis.tests
Installing com.example.android.apis.tests
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/com.example.android.apis.tests"
pkg: /data/local/tmp/com.example.android.apis.tests
Success


Running tests
Test running startedFinish

Вы также можете попробовать перезапустить adb с помощью adb kill-server и запустить эмулятор вручную из AVD manager.

Убедитесь, что в эмуляторе нет предварительно установленного приложения ApiDemos, или подписи не будут совпадать.Удалите существующий ApiDemos, затем попытайтесь развернуть и запустить ApiDemos из IntelliJ IDEA, затем попробуйте снова запустить тестовую конфигурацию.


ОБНОВЛЕНИЕ: Мы провели некоторое исследование и нашли источникэта проблема.По умолчанию IntelliJ IDEA устанавливает область зависимостей для модуля приложения внутри тестового модуля на Compile , так что все производственный и тестовый классы скомпилированы в один Test.apk.

Вместо этогообласть должна быть установлена ​​на При условии , и мы исправим это в следующем обновлении.Прямо сейчас вам нужно исправить это вручную, как показано на скриншоте:

Provided scope

Перестройте проект и запустите тесты, снова, на этот раз будут развернуты 2 отдельных файла apk, одиндля основного приложения и второго для тестов будут запущены тесты:

Waiting for device.
Target device: emulator-5554 (ICS)
Uploading file
    local path: D:\dev\android-sdk-windows\samples\android-15\ApiDemos\out\production\Tests\Tests.apk
    remote path: /data/local/tmp/com.example.android.apis.tests
Installing com.example.android.apis.tests
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/com.example.android.apis.tests"
pkg: /data/local/tmp/com.example.android.apis.tests
Success


Uploading file
    local path: D:\dev\android-sdk-windows\samples\android-15\ApiDemos\out\production\ApiDemos\ApiDemos.apk
    remote path: /data/local/tmp/com.example.android.apis
Installing com.example.android.apis
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/com.example.android.apis"
pkg: /data/local/tmp/com.example.android.apis
Success


Running tests
Test running startedFinish
0 голосов
/ 20 января 2012

Запуск юнит-тестов в эмуляторе не практичен (в основном это занимает слишком много времени). А поскольку файлы jar для Android полезны только для компиляции, запускать их с помощью модульных тестов кажется невозможным. Хорошей альтернативой является использование продвинутого mocking framework (лично я предпочитаю jMockit, но есть и другие)

См. Пример:

https://github.com/ko5tik/andject/blob/master/src/test/java/de/pribluda/android/andject/ViewInjectionTest.java

Здесь я проверяю свой класс на соответствие производной активности Android, и он должен вызывать методы суперкласса (это работает в Maven, Eclipse или IDEA на месте)

0 голосов
/ 20 января 2012

Вы можете запустить инструментарий из ant, из командной строки или из скрипта. В случае, если вы предпочитаете последнее, этот пост может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...