16

私の質問は、Android ライブラリ用の Androidスタンドアロンテスト プロジェクトを作成するにはどうすればよいですか?

Androidライブラリ(プロジェクト設定で「ライブラリ」とマークされています) と、JUnit テスト クラスを含む Android プロジェクトがあります。テストプロジェクトは、Android ライブラリを正しく参照します (「Android」の下のプロジェクト設定内)。

私のライブラリのソース コードは、パッケージにありますcom.mayastudios。すべてのテスト ケースも同じパッケージにあります (ただし、別のプロジェクトにあります)。だから基本的に私はこのようなものを持っています:

+- MyLibraryProject
   +- src
      +- com/mayastudios/MyClass.java
   +- AndroidManifest.xml
   +- ...
+- MyTestProject (references MyLibraryProject)
   +- test
      +- com/mayastudios/MyClassTests.java
   +- AndroidManifest.xml
   +- ...

テストプロジェクトの Android マニフェストは次のとおりです。

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

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

    <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.mayastudios" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <application android:label="Spatialite-NewApi-UnitTests">
        <uses-library android:name="android.test.runner" />
    </application>

</manifest>

ただし、テストプロジェクトを実行すると (ADT を使用した Eclipse から、"Run As -> Android JUnit Test" を使用)、次のエラーが発生します。

Unable to find instrumentation target package: com.mayastudios

完全なコンソール ログは次のとおりです。

[2012-04-24 17:24:20 - spatialite-test] Android Launch!
[2012-04-24 17:24:20 - spatialite-test] adb is running normally.
[2012-04-24 17:24:20 - spatialite-test] Performing android.test.InstrumentationTestRunner JUnit launch
[2012-04-24 17:24:20 - spatialite-test] Automatic Target Mode: using device '3732FBC2711300EC'
[2012-04-24 17:24:20 - spatialite-test] Uploading spatialite-test.apk onto device '3732FBC2711300EC'
[2012-04-24 17:24:20 - spatialite-test] Installing spatialite-test.apk...
[2012-04-24 17:24:22 - spatialite-test] Success!
[2012-04-24 17:24:22 - spatialite-test] Launching instrumentation android.test.InstrumentationTestRunner on device 3732FBC2711300EC
[2012-04-24 17:24:22 - spatialite-test] Collecting test information
[2012-04-24 17:24:23 - spatialite-test] Test run failed: Unable to find instrumentation target package: com.mayastudios

<instrumentation>機能しなかったマニフェストからタグを削除しようとしました。

これまでのところ、これを機能させる唯一の方法は、デフォルトの Android プロジェクト (アクティビティを含む) を作成し、それをテスト プロジェクトから参照して、このデフォルトの Android プロジェクトのパッケージ名をtargetPackage以下のように使用すること<instrumentation>でした。しかし、それは私が望むものではありません。スタンドアロンのテスト プロジェクトが必要です。

助言がありますか?

4

1 に答える 1

25

ああ、答えはとても簡単です。エラーは、テストプロジェクトの Android マニフェストの 3 行目にあります。ここでは、間違ったパッケージが言及されています。したがって、修正されたマニフェストは次のようになります。

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

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

    <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.mayastudios" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <application android:label="Spatialite-NewApi-UnitTests">
        <uses-library android:name="android.test.runner" />
    </application>

</manifest>

そして、3 つのプロジェクト (ライブラリ、テスト対象プロジェクト、テスト プロジェクト) が必要だと言うすべての人へ: それらは間違っています。ライブラリ プロジェクトとテスト プロジェクトで十分です。テスト プロジェクトにアクティビティを含める必要さえありません。

于 2012-04-25T06:02:08.160 に答える