Не удалось выполнить тестовый прогон: сбой инструментария из-за "java.lang.ClassNotFoundException"
Это моя первая настройка android test project
для тестирования a android project
.
Я создал очень простой тестовый пример, который я пытаюсь запустить, однако то, что у меня нет, не работает. Я получаю Test run failed: Instrumentation run failed due to 'java.lang.ClassNotFoundException'
.
Я хотел бы удалить это больше, но я не получаю больше информации, например, какой класс он пытается найти и т.д. Любые идеи о том, как получить дополнительную информацию от ошибки? Любые общие области, на которые я должен обратить внимание, или что-то, что может потребоваться настроить, что я пропускаю?
Ниже приведена информация с консоли:
[2013-04-16 13:21:49 - XyzProgramTest] Android Launch!
[2013-04-16 13:21:49 - XyzProgramTest] adb is running normally.
[2013-04-16 13:21:49 - XyzProgramTest] Performing android.test.InstrumentationTestRunner JUnit launch
[2013-04-16 13:21:49 - XyzProgramTest] Automatic Target Mode: launching new emulator with compatible AVD 'GalaxyNexusAPI_17'
[2013-04-16 13:21:49 - XyzProgramTest] Launching a new emulator with Virtual Device 'GalaxyNexusAPI_17'
[2013-04-16 13:21:53 - Emulator] extension WGL_ARB_make_current_read was not found
[2013-04-16 13:21:53 - Emulator] extension WGL_EXT_swap_control was not found
[2013-04-16 13:21:53 - Emulator] Failed to create pbuf surface for FB 0x3004
[2013-04-16 13:21:53 - Emulator] emulator: WARNING: Could not initialize OpenglES emulation, using software renderer.
[2013-04-16 13:21:54 - XyzProgramTest] New emulator found: emulator-5554
[2013-04-16 13:21:54 - XyzProgramTest] Waiting for HOME ('android.process.acore') to be launched...
[2013-04-16 13:22:55 - XyzProgramTest] HOME is up on device 'emulator-5554'
[2013-04-16 13:22:55 - XyzProgramTest] Uploading XyzProgramTest.apk onto device 'emulator-5554'
[2013-04-16 13:22:55 - XyzProgramTest] Installing XyzProgramTest.apk...
[2013-04-16 13:23:57 - XyzProgramTest] Success!
[2013-04-16 13:23:57 - XyzProgramTest] Project dependency found, installing: XyzProgram
[2013-04-16 13:23:57 - XyzProgram] Uploading XyzProgram.apk onto device 'emulator-5554'
[2013-04-16 13:23:58 - XyzProgram] Installing XyzProgram.apk...
[2013-04-16 13:24:05 - XyzProgram] Success!
[2013-04-16 13:24:05 - XyzProgramTest] Launching instrumentation android.test.InstrumentationTestRunner on emulator-5554
[2013-04-16 13:24:07 - XyzProgramTest] Test run failed: Instrumentation run failed due to 'java.lang.ClassNotFoundException'
Дополнительные примечания:
В моем android test project
я создал простой тест с пакетом, похожим на пакет, который соответствует классу, который я пытаюсь протестировать в моем android project
. Так что-то вроде com.company.android.projectname
. Я указал это в разделе android test project
manifest
file instrumentation
.
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.company.android.projectname" />
Когда я изменил это, чтобы соответствовать этому, я получаю новую ошибку, которая говорит Test run failed: Unable to find instrumentation target package: com.company.android.projectname
Я не уверен на 100%, что это за targetPackage
, и если мне нужно несколько инструментов для каждого пакета, который я хочу проверить, и т.д. Когда я устанавливаю его в com.company.android
, то есть когда я получаю java.lang.ClassNotFoundException
, Любые предложения были бы оценены, тем временем я продолжу свои усилия, чтобы понять это самостоятельно.
Ответы
Ответ 1
Выяснил мою проблему и отправил ответ для целей документации...
Корень моей проблемы состоял из двух разных вещей:
- Я сделал несколько рефакторингов, которые меняют местоположение моего
android.app.Application
класс и мои действия. Это сделало меня таким
основная программа не работала, так как мне нужно было обновить мой манифест в моем
android project
.
- После внесения обновлений в мой манифест в моем проекте Android, мне пришлось сделать некоторые обновления в моем
android test project
, чтобы указать на обновленное местоположение класса, который расширяет android.app.Application
.
После этого некоторые очистили и снова протестировали, и все было хорошо.
Ответ 2
FYI Я столкнулся с этим и должен был добавить
<uses-library android:name="android.test.runner"/>
в теге <application/>
Ответ 3
У меня была эта проблема после слияния, в которой build.gradle указывал неправильный тестовый пакет, так как я использовал значение по умолчанию.
Просто удалив эти строки из build.gradle, он смог найти необходимые классы в пакете по умолчанию, который равен src/androidTest
.
sourceSets {
instrumentTest.setRoot('src/instrumentTest')
}
//removed this to use the default androidTest source set.
Это, вероятно, не будет точным решением, но, надеюсь, поможет кому-то в правильном направлении.
Ответ 4
Я столкнулся с этой проблемой сегодня, я принял специфический для Android файл ant build.xml, который находится в директории ${sdk.dir}/tools/ ant/"для выполнения все тестовые примеры в командной строке, но STDOUT сообщает мне об ошибке, как ваш:
vinceMacBook ~/dev/aSQLite+-android/tests$ ant clean uninstall debug install test
...
test:
[echo] Running tests ...
[exec] INSTRUMENTATION_RESULT: shortMsg=java.lang.ClassNotFoundException
[exec] INSTRUMENTATION_RESULT: longMsg=java.lang.ClassNotFoundException:
android.test.InstrumentationTestRunner
[exec] INSTRUMENTATION_CODE: 0
Я потратил немного времени на выяснение этого, я нашел основную причину в корневом модуле AndroidManifest.xml
, я думал, что элемент приложение ничего не нужно настраивать, поэтому я пропустил его в manifest, который вызывает мою проблему.
Я не уверен, что вы разделяете одну и ту же структуру со мной, поэтому я размещаю здесь свою структуру проекта, а также содержимое ключевого файла, надеюсь, что кто-то может помочь.
vinceMacBook ~/dev/aSQLite+-android$ tree
.
├── AndroidManifest.xml
│ <?xml version="1.0" encoding="utf-8"?>
│ <manifest
│ xmlns:android="http://schemas.android.com/apk/res/android"
│ package="com.vincestyling.asqliteplus"
│ android:versionCode="1"
│ android:versionName="0.1">
│
│ <uses-sdk android:minSdkVersion="8" />
│
│ <!-- important configuration, cannot be omit even if nothing to say. -->
│ <application />
│
│ </manifest>
│
├── build.xml
│ unchanged, generated by "android create project <project_name>" command.
│
├── project.properties
│ unchanged, generated by "android create project <project_name>" command.
│
├── src
│ └── com
│ └── vincestyling
│ └── asqliteplus
│ ├── DBOperator.java
│ ├── DBOverseer.java
│ └── the library source code lie here...
│
└── tests
├── AndroidManifest.xml
│ <?xml version="1.0" encoding="utf-8"?>
│ <manifest
│ xmlns:android="http://schemas.android.com/apk/res/android"
│ package="com.vincestyling.asqliteplus.tests">
│
│ <application>
│ <uses-library android:name="android.test.runner"/>
│ </application>
│
│ <instrumentation
│ android:name="android.test.InstrumentationTestRunner"
│ android:targetPackage="com.vincestyling.asqliteplus"/>
│
│ </manifest>
│
├── ant.properties
│ # [Comments], [Comments], [Comments] which generated by command.
│ # [Comments], [Comments], [Comments] which generated by command.
│ # [Comments], [Comments], [Comments] which generated by command.
│
│ # important configuration, point to the root library module.
│ tested.project.dir=../
│
├── build.xml
│ unchanged, generated by "android create test-project <project_name>" command.
│
└── src
└── com
└── vincestyling
└── asqliteplus
├── BaseDBTest.java
├── QueryStatementTest.java
└── the test source code lie here...
Моя структура проекта последовала за Android Test Projects, которую Google предлагает нам сделать, состоит из корневого библиотечного модуля, который поддерживает основную логику и тестовый модуль который внутри корневого модуля. Выше основные ресурсы проекта, но не все файлы, я отправлю ссылку на проект здесь, как только я его выпустил.
------------ Обновление 2014-01-06 --------------
В настоящее время мой проект был опубликован на моем github: aSQLitePlus-android, проверьте детали, если они заинтересованы.