Проект тестирования Android сбой с ошибкой "Не удалось выполнить тестовый прогон: прорыв инструментария из-за сбоя процесса".

Моя проблема кажется немного другой, чем здесь. Тестовый запуск не удался: инструментальный прогон не выполнен из-за "Процесс сбой". при тестировании нескольких действий Android
Я следовал за шагами, данными в PDF. Я создал тестовый проект "TestAndroidCalculatorBlackbox" (нужно ли нам иметь два проекта, один тест и один основной проект, возможно, это может быть причиной, потому что в ссылке Robotium "Getting Started" они хотят, чтобы мы создавали проекты для Notepad),
и добавил jars robotium-solo-5.0.1.jar, robotium-solo-1.6.0.jar, чтобы избавиться от красных линий ошибок ниже solo. функции и jay.way package.
Я прилагаю скриншот с ошибкой: Project tree and error screen shoty AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.testcalculator"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.testcalculator" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" android:debuggable="true">
        <uses-library android:name="android.test.runner" />
    </application>

</manifest>

и я добавил пакет в список инструментов:

 c:\> adb shell pm list instrumentation
instrumentation:PACKAGE.test.test/android.test.InstrumentationTestRunner (target=PACKAGE)
instrumentation:PACKAGE.test.test.test.test.test.test/android.test.InstrumentationTestRunner (target=PACKAGE.test.test)
instrumentation:com.example.android.apis/.app.LocalSampleInstrumentation (target=com.example.android.apis)
>> instrumentation:com.testcalculator/android.test.InstrumentationTestRunner (target=com.testcalculator) <<

Ответ 1

  1. Не прикрепляйте более одной библиотеки robotium. robotium-solo-1.6.0.jar должен быть удален. Это устарело, и вы больше не должны его использовать.

  2. Ваше целевое приложение уже установлено? Он должен быть установлен, если вы собираетесь запускать тесты для него. Вы не можете установить его, только если ваш тестовый проект имеет ссылку на целевой проект.

  3. Если у вас есть отдельные APK для приложений и инструментов, вы должны изменить пакет в своем манифесте. У вас фактически есть com.testcalculator, и целевой пакет один и тот же - они должны отличаться. Кстати, я не вижу источников приложения в вашем проекте, поэтому часть приложения должна быть удалена.

  4. Ваша ошибка не говорит о многом, всегда полезно опубликовать трассировку стека из LogCat.

  5. Прочитайте руководства, прежде чем начать писать тесты:

    http://developer.android.com/tools/testing/testing_android.html https://code.google.com/p/robotium/w/list

Ответ 2

Для тех, кто Androidx или использует его в настоящее время, эта ошибка возникает из-за использования testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" вместо testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner".

Использование последнего полностью устраняет ошибку.

Ответ 4

Для разработчика, который еще не использовал androidx. Просмотр LogCat решил для меня проблему, которая заключалась в удалении этих строк, запущенных не в том потоке из-за RxJava.

companion object {
    @get:ClassRule @JvmStatic
    val testSchedulerRule = RxImmediateSchedulerRule()
}

Ответ 5

В моем случае это было нарушение политики StrictMode, вызванное AndroidJUnitRunner:

D/StrictMode: StrictMode policy violation: android.os.strictmode.UntaggedSocketViolation: [...]
W/System.err: StrictMode VmPolicy violation with POLICY_DEATH; shutting down.

Отключение проверки detectUntaggedSockets() при запуске теста Espresso исправило это для меня. Смотрите этот вопрос, чтобы узнать, как это проверить.