Сначала прочтите " Протестируйте свое приложение" на сайте developer.android.com. Обратите внимание, что существуют некоторые различия в использовании инструментальных тестов при тестировании платформы.
Таким образом, инструментальный тест предоставляет специальную среду выполнения теста, запускаемую с помощью команды am instrument
, где целевой процесс приложения перезапускается и инициализируется с базовым контекстом приложения, а поток инструментария запускается внутри виртуальной машины процесса приложения. Ваш тестовый код начинает выполнение в этом потоке инструментария и предоставляется с экземпляром Instrumentation
который обеспечивает доступ к контексту приложения и API для управления тестируемым процессом приложения.
Ключевые понятия
- инструментарий должен быть объявлен в пакете приложения с
<instrumentation>
вложенным в<manifest>
манифеста пакета приложения. - манифест пакета приложения может технически содержать несколько тегов
<instrumentation>
, хотя обычно не используется таким образом. - каждый
<instrumentation>
должен содержать:- атрибут
android:name
: это должно быть имя подклассаInstrumentation
, включенного в тестовое приложение, которое обычно является используемым средством запуска тестов, например:android.support.test.runner.AndroidJUnitRunner
- должен быть определен атрибут
android:targetPackage
. Его значение должно соответствовать тестируемому пакету приложения.
- атрибут
Сводка шагов
Ниже приведены общие пункты назначения для герметичных тестов на службы каркаса:
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestests
Если вы добавляете новый инструментальный модуль для своего компонента, см.
Следуя существующему соглашению, если вы добавляете тесты в одно из указанных выше мест. Если вы настраиваете новый тестовый модуль, выполните настройку
AndroidManifest.xml
иAndroid.mk
в одном из указанных выше мест.См. Пример в frameworks / base / core / tests / coretests / . Обратите внимание на эти строки, устанавливающие дополнительные приложения:
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />
Не забудьте отметить свой тест как
@SmallTest
,@MediumTest
или@LargeTest
Создайте тестовый модуль с m, например:
m FrameworksCoreTests
Запустите тесты:
Самое простое решение - использовать Atest следующим образом:
atest FrameworksCoreTests
Или для более сложных тестов используйте тестовую привязь Торговой федерации :
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
Если вы не используете Tradefed, установите и запустите тесты вручную:
- Установите сгенерированный apk:
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
Совет: вы используете
adb shell pm list instrumentation
чтобы найти инструменты внутри только что установленного apkЗапустите тесты с различными вариантами:
все тесты в apk
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
все тесты в рамках определенного пакета Java
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
все тесты по определенному классу
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
специальный метод испытаний
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest#testCancel \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
Ваш тест может сделать явное утверждение о прохождении или отказе с использованием API JUnit
; кроме того, любые неперехваченные исключения также вызовут функциональный сбой.
Для выдачи показателей производительности ваш тестовый код может вызвать Instrumentation#sendStatus
для отправки списка пар ключ-значение. Важно отметить следующее:
- показатели могут быть целыми или с плавающей запятой
- любые нечисловые значения будут отброшены
- ваш тестовый apk может быть либо функциональным тестом, либо тестом метрик, однако смешивание обоих в настоящее время не поддерживается