web-dev-qa-db-ja.com

android.util.AndroidException:INSTRUMENTATION_FAILED:

シンプルなAndroidアプリがあり、スマートフォンを使用してテストしています。そのためには2つの方法があります。

  1. Eclipseの使用
  2. CLIの使用

問題:

Eclipseを使用して単体テストケースを実行すると、実行時に電話にアプリがインストールされ、junitテストが実行されます。その後、CLIでコマンドを使用すると次のようになります。adb-dShell am Instrument -w com.abc.xyz.test/Android.test .InstrumentationTestRunner、正常に動作します。

ただし、Eclipseで単体テストケースを最初に実行せずにCLIで上記のコマンドを直接実行すると、エラーが発生します。

 Android.util.AndroidException:INSTRUMENTATION_FAILED:com.abc.xyz.test/Android.test.InstrumentationTestRunner 
 at com.Android.commands.am.Am.runInstrument(Am.Java:586) 
 at com.Android.commands.am.Am.run(Am.Java:117)
 at com.Android.commands.am.Am.main(Am.Java:80)
 at com.Android.internal.os.RuntimeInit.finishInit(Native Method)
 at com.Android.internal.os.RuntimeInit.main(RuntimeInit.Java:263)
 at dalvik .system.NativeStart.main(ネイティブメソッド)
 INSTRUMENTATION_STATUS:id = ActivityManagerService 
 INSTRUMENTATION_STATUS:エラー=インストルメンテーションターゲットパッケージが見つかりません:com.abc.xyz 
 INSTRUMENTATION_STATUS_CODE:-1 

AndroidMAnifest.xmlに含まれるもの:

    Android:name="Android.test.InstrumentationTestRunner"
    Android:targetPackage="com.abc.xyz" 

    inside instrumentation tag

誰か助けてくれませんか

21
user1968471

1月から解決したと思いますが、コマンドラインツールを使って同様の問題(エラーメッセージが異なる)を見つけ、次の手順で説明するように解決しました。空のテストでダミープロジェクトを作成してからテストが成功するまでのプロセス全体を実行します。私はそれが誰かのために役立つことを願っています:

最初のステップ、プロジェクトを作成します:

Android create project 
  --name MyExample 
  --target "Google Inc.:Google APIs:17" 
  --path MyExample 
  --package com.example 
  --activity MyExampleActivity

2番目のステップ、テストプロジェクトを作成します:

Android create test-project 
  --path MyExampleTest 
  --name MyExampleTest 
  --main ../MyExample

番目のステップ、プロジェクトディレクトリにアクセスし、ビルドして、プロセスが正常に終了することを確認します。

cd MyExample && ant debug

4番目のステップ、エミュレータにインストールします:

adb -s emulator-5554 install -r bin/MyExample-debug.apk

5番目のステップ、テストプロジェクトディレクトリにアクセスして、テストを実行してみます。

cd ../MyExampleTest && 
adb Shell am instrument -w com.example.tests/Android.test.InstrumentationTestRunner

その結果:

INSTRUMENTATION_STATUS: id=ActivityManagerService
INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfo{com.example.tests/Android.test.InstrumentationTestRunner}
INSTRUMENTATION_STATUS_CODE: -1
Android.util.AndroidException: INSTRUMENTATION_FAILED: com.example.tests/Android.test.InstrumentationTestRunner
        at com.Android.commands.am.Am.runInstrument(Am.Java:676)
        at com.Android.commands.am.Am.run(Am.Java:119)
        at com.Android.commands.am.Am.main(Am.Java:82)
        at com.Android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
        at com.Android.internal.os.RuntimeInit.main(RuntimeInit.Java:235)
        at dalvik.system.NativeStart.main(Native Method)

6番目のステップ、インストルメンテーションクラスをリストし、現在のプロジェクトが欠落していることを確認します。

adb Shell pm list instrumentation

私のマシンでは次のようになります。

instrumentation:com.Android.emulator.connectivity.test/Android.test.InstrumentationTestRunner (target=com.Android.emulator.connectivity.test)
instrumentation:com.Android.emulator.gps.test/Android.test.InstrumentationTestRunner (target=com.Android.emulator.gps.test)
instrumentation:com.Android.example.spinner.tests/Android.test.InstrumentationTestRunner (target=com.Android.example.spinner)
instrumentation:com.Android.smoketest.tests/com.Android.smoketest.SmokeTestRunner (target=com.Android.smoketest)
instrumentation:com.Android.smoketest.tests/Android.test.InstrumentationTestRunner (target=com.Android.smoketest)
instrumentation:com.example.Android.apis/.app.LocalSampleInstrumentation (target=com.example.Android.apis)

ご覧のとおり、com.example.testsのインストルメンテーションは存在しないため、作成する必要があります。

7番目のステップ、テストプロジェクトをビルドし、正常に実行されたことを確認します。

ant debug

8番目のステップ、エミュレータにインストールします:

adb -s emulator-5554 install -r bin/MyExampleTest-debug.apk

9番目のステップ、インストルメンテーションクラスを一覧表示し、プロジェクトの1つを探します。

adb Shell pm list instrumentation

その結果:

instrumentation:com.Android.emulator.connectivity.test/Android.test.InstrumentationTestRunner (target=com.Android.emulator.connectivity.test)
instrumentation:com.Android.emulator.gps.test/Android.test.InstrumentationTestRunner (target=com.Android.emulator.gps.test)
instrumentation:com.Android.example.spinner.tests/Android.test.InstrumentationTestRunner (target=com.Android.example.spinner)
instrumentation:com.Android.smoketest.tests/com.Android.smoketest.SmokeTestRunner (target=com.Android.smoketest)
instrumentation:com.Android.smoketest.tests/Android.test.InstrumentationTestRunner (target=com.Android.smoketest)
instrumentation:com.example.tests/Android.test.InstrumentationTestRunner (target=com.example)
instrumentation:com.example.Android.apis/.app.LocalSampleInstrumentation (target=com.example.Android.apis)

最後から2番目のinstrumentation:com.example.testsを見てください、それは私たちが望んでいたものです。

10番目のステップ、テストを実行します:

adb Shell am instrument -w com.example.tests/Android.test.InstrumentationTestRunner

その結果:

Test results for InstrumentationTestRunner=
Time: 0.0

OK (0 tests)

以上です。次に、テストを実装し、通常どおりにコンパイルしてインストールします。さらに、次のように削除できます。

adb Shell pm uninstall com.example.tests

ただし、同じエラーを回避するには、インストルメンテーションクラスを再度作成する必要があります。

30
Birei

より正確な説明/アプローチは次のとおりです。

あなたがすることを確認してください

adb install -r bin/<>-debug.apk 

テストとアプリディレクトリのbothから。

その後 ant testはtestsディレクトリから動作するはずです。 (私の推測では、テストパッケージからアプリへの依存関係が欠落していたため、失敗が発生していました)。

上記の小さなハックを除いて、私が従った手順の残りはAndroidテストの紹介 http://developer.Android.com/ から来ました。

2
vpathak

必ず前のアプリをアンインストールし、前のアプリをアンインストールした後でのみテストを再インストールまたは開始してください

1
testsingh