2013-04-16 1 views
15

Это моя первая настройка android test project для тестирования android project.Не удалось выполнить тестовый прогон: Не удалось выполнить контрольно-измерительный пуск из-за «java.lang.ClassNotFoundException»

Я создал очень простой тестовый пример, который я пытаюсь запустить, однако то, что у меня нет, не работает. Я получаю 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 projectmanifest файла 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. Любые предложения будут оценены, в то же время я продолжу свои усилия, чтобы понять это самостоятельно.

ответ

5

Разобрался мой вопрос, и я разместить ответ для целей документирования ...

корень моей проблемы было 2 разные вещи:

  1. Я немного рефакторинга, которые изменяют расположение моего android.app.Application класс и мои действия. Это сделало так, что моя основная программа не работала, так как мне нужно было обновить мой манифест в моем android project.
  2. После внесения обновлений в мой манифест в моем проекте андроида мне пришлось внести некоторые обновления в мой android test project, чтобы указать на обновленное местоположение класса, который расширяет android.app.Application.

После этого некоторые очистили и испытали снова, и все было хорошо.

+11

Не могли бы вы объяснить, что именно вы изменили на втором этапе тестового проекта? –

+0

Объясните больше пожалуйста –

+0

@PawelByszewski, @Binghammer Его было некоторое время с тех пор, как я сделал сообщение, но из памяти ... Я переместил местоположение класса, расширившего 'android.app.Application'. Я думаю, что я сделал лучшую компоновку имен своих пакетов и переместил этот класс в этот процесс. Поскольку я сделал это, мне пришлось обновить его ссылку в файле манифеста. Например. Если в eclipse дважды щелкните мышью на 'AndroidManifest.xml', измените вкладку внизу на' AndroidManifest.xml', затем найдите '

0

У меня была эта проблема после слияния, в которой build.gradle указывал неправильный тестовый пакет, так как я использовал значение по умолчанию.

Просто удалив эти строки из build.gradle, он смог найти необходимые классы в пакете по умолчанию, который равен src/androidTest.

sourceSets { 
    instrumentTest.setRoot('src/instrumentTest') 
} 
//removed this to use the default androidTest source set. 

Это, вероятно, не точное решение, но, надеюсь, поможет кому-то в правильном направлении.

6

FYI Я столкнулся с этим и пришлось добавить

<uses-library android:name="android.test.runner"/>

в моей <application/> теге

0

Я столкнулся с этой проблемой сегодня, я принятой андроид конкретным муравей 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, я думал приложения элемента ничего, чтобы быть настроить так, я опустил его в проявляется элемента, который вызывает моя проблема.

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

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 «s описание, которое Google предложить нам делать, состоит из модуля библиотеки корня, который несущий основную логику, и модуль тест, который внутри корневого модуля. Выше основные ресурсы проекта, но не все файлы, я отправлю ссылку на проект здесь, как только я ее выпустил.

------------ Обновление 2014-01-06 --------------

В настоящее время мой проект был опубликован на моем GitHub: aSQLitePlus-android, проверьте детали, если они заинтересованы.