25

Android プロジェクトをテストするために Android テスト プロジェクトをセットアップするのはこれが初めてです。

実行しようとしている非常に基本的なテストケースを作成しましたが、実行できません。を取得し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 テスト プロジェクトでは、Android プロジェクトでテストしようとしているクラスと一致するパッケージに似たパッケージで簡単なテストを作成しました。のようなものcom.company.android.projectnameです。これは、Android テスト プロジェクトmanifestファイルの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

4

7 に答える 7

8

参考までに、私はこれに遭遇し、追加する必要がありました

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

私の<application/>タグ内

于 2014-09-30T04:34:01.780 に答える
1

今日この問題に遭遇しました。コマンドラインですべてのテストケースを実行するために「${sdk.dir}/tools/ant/」ディレクトリにあるAndroid固有のant build.xmlを採用しましたが、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...

私のプロジェクト構造は、Google が推奨するAndroid Test Projectsの説明に従い、コア ロジックを運ぶルート ライブラリ モジュールと、ルート モジュール内のテスト モジュールで構成されています。上記はプロジェクトの主要なリソースですが、すべてのファイルではありません。リリースしたら、プロジェクトのリンクをここに投稿します。

------------ 2014-01-06 更新 --------------

現在、私のプロジェクトは私の github: aSQLitePlus-androidに公開されています。興味があれば詳細を確認してください。

于 2014-12-31T09:27:18.833 に答える
0

デフォルトを使用していたため、build.gradleが間違ったテストパッケージを指定していたマージ後にこの問題が発生しました。

build.gradle からこれらの行を削除するだけで、必要なクラスをデフォルト パッケージ ( src/androidTest.

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

これはおそらく正確な解決策ではありませんが、誰かを正しい方向に導くことを願っています.

于 2014-07-29T15:25:18.507 に答える