web-dev-qa-db-ja.com

Android Library Projectをテストする方法

私はAndroidに基づいたライブラリプロジェクトAndroidユーティリティクラスのみ(アクティビティなし)を含むビットマップクラス(AndroindLibと呼びます)を作成しています。テストしましたAndroid JUnitを使用しているが、AnroidLib.apkが見つからないと不平を言っている

単体テストの正しい方法は何ですかAndroid Library Project?

91
Lily

引用 ドキュメント

「ライブラリプロジェクトのコードとリソースでテストをセットアップする方法として、次の2つの推奨方法があります。

  • ライブラリプロジェクトに依存するアプリケーションプロジェクトをインスツルメントするテストプロジェクトを設定できます。その後、ライブラリ固有の機能のテストをプロジェクトに追加できます。

  • ライブラリに依存する標準アプリケーションプロジェクトをセットアップし、そのプロジェクトにインスツルメンテーションを配置できます。これにより、テスト/計装とテストするコードの両方を含む自己完結型のプロジェクトを作成できます。

70
CommonsWare

テストプロジェクトでは、ライブラリのパッケージと同じになるようにパッケージ名を変更するだけです。たとえば、パッケージが"com.example.lib"であるライブラリがあります。ライブラリを対象とするテストプロジェクトを作成します。マニフェストファイルには、package="com.example.lib.test"targetPackage="com.example.lib"が表示されます。パッケージを「com.example.lib.test」から「com.example.lib」に変更するだけです(targetPackageそのままにします)。

また、ライブラリがテストプロジェクトを参照していることを確認してください[〜#〜] not [〜#〜] in Java build path、but asいつものように= Android library:Eclipseでは、Project->Properties->Androidタブではライブラリとして表示する必要がありますが、Project->Properties->Java Build Pathタブではnotとして表示する必要があります。

次に、テストを実行します。

17
alexaschka

http://www.paulbutcher.com/2010/09/Android-library-project-with-tests-step-by-step/ CommonsWareの答えの2番目の提案を実装するために必要なプロセスの説明に役立ちます

13
yuzisee

ドキュメント

ライブラリモジュールのテストは、アプリのテストと同じです。主な違いは、ライブラリとその依存関係がテストAPKの依存関係として自動的に含まれることです。つまり、テストAPKには独自のコードだけでなく、ライブラリのAARとそのすべての依存関係も含まれます。個別の「テスト中のアプリ」がないため、androidTestタスクはテストAPKのみをインストール(およびアンインストール)します。複数のマニフェストファイルをマージする場合、Gradleはデフォルトの優先順位に従い、ライブラリのマニフェストをテストAPKのメインマニフェストにマージします。

3
Avilio

注:このソリューションは、Eclipse Indigo(3.8.2)の使用に基づいており、別のIDEに対して少し異なる実装が必要になる場合がありますが、基本原則は同じです。

私は同様の問題を抱えていましたが、次のことが常に機能することがわかりました:

注:これらの手順は、新しいプロジェクトグループをゼロから構築するためのものです。プロジェクトグループの一部を既に構築している場合は、プロジェクトを変更する必要があります。同じように接続するように。

  1. 作成中に[Is Library]チェックボックスをオンにして、新しいAndroid Libraryプロジェクトを作成します。 (たとえば、「RemingtonAndroidTools」という名前のAndroidプロジェクト)。
  2. Android Libraryプロジェクトをビルドし、binフォルダーにjarファイルが作成されたことを確認します。 (たとえば、「RemingtonAndroidTools.jar」という名前のjarファイル。)
  3. Androidテストアプリとして機能するAndroidアプリをテストするための空のAndroidプロジェクトを作成します。 (たとえば、「RemingtonAndroidToolsTestApp」という名前のAndroidプロジェクト)。テスト用に追加する必要があるものがない限り、Android Test Appプロジェクトのソースコードまたはリソースを変更する必要はありません。 Android Test App Projectを変更することなく、多くのことをテストできます。 Androidテストアプリプロジェクトは、AndroidライブラリプロジェクトとAndroidライブラリプロジェクトのテストを行うAndroid Junitプロジェクト間のブリッジですAndroid Junit可能。
  4. JavaテストアプリプロジェクトのAndroidビルドパスのライブラリタブに移動します(この例では「RemingtonAndroidToolsTestApp」)。
  5. [Add Android]ボタンを使用して、Androidライブラリプロジェクト(この例では "RemingtonAndroidTools")のjarファイル(この例では "RemingtonAndroidTools.jar")を追加します。
  6. Androidライブラリテスターとして機能する新しいAndroidテストプロジェクト(たとえば、「RemingtonAndroidToolsTester」)を作成し、Android Test Appプロジェクト(この例では「RemingtonAndroidToolsTestApp」)を選択します。ターゲット。
  7. Java Library Testerプロジェクト(この例では「RemingtonAndroidToolsTester」)のAndroid Build Pathの[Library]タブに移動します。
  8. [Add Android]ボタンを使用して、Androidライブラリプロジェクト(この例では "RemingtonAndroidTools")のjarファイル(この例では "RemingtonAndroidTools.jar")を追加します。
  9. Android Library Testerプロジェクト(たとえば「danny.remington.remington_Android_tools_test_app.test」)でAndroidパッケージの最後のフォルダーを見つけ、次を継承するテストクラス(たとえば「MainActivityTest」)を追加しますActivityInstrumentationTestCase2。
  10. テストクラス(この例では "TestActivityTest")を編集して、Androidテストアプリ(この例では "RemingtonAndroidToolsTestApp")のアクティビティ(たとえば "TestActivity")をActivityInstrumentationTestCase2のパラメーターとして使用します。
  11. テストクラス(この例では "TestActivityTest")を編集し、super(Class)を呼び出してAndroidテストアプリのクラス(たとえば "TestActivity.class")を渡すデフォルトコンストラクターを作成します。

次のような3つのプロジェクト(Androidライブラリ、Androidテストアプリ、Androidライブラリテスター)になります。

enter image description here

enter image description here

enter image description here

Androidライブラリをテストするためのクラスは、次のようになります。

package danny.remington.remington_Android_tools_test_app.test;

import Android.test.ActivityInstrumentationTestCase2;
import danny.remington.remington_Android_tools_test_app.TestActivity;

/**
 * 
 */
public class TestActivityTest extends
      ActivityInstrumentationTestCase2<TestActivity> {

   public TestActivityTest() {
      super(TestActivity.class);
   }

}

その後、必要なテストを追加できます。 Android特定のコンポーネント(Assetsフォルダーなど)へのアクセスが必要な場合を除き、テストを実行するためにAndroidテストアプリ(この例では「RemingtonAndroidToolsTestApp」)をさらに参照する必要はありません。 Android固有のコンポーネントにアクセスする必要がある場合は、Androidテストアプリ(この例では「RemingtonAndroidToolsTestApp」)を変更し、標準のAndroid Junit API。 (詳細についてはこちらをご覧ください: http://developer.Android.com/tools/testing/testing_Android.html

ユーティリティクラスがAndroid特定のコードに依存していない場合は、標準のJUnit単体テストを使用できます。Androidバージョンを使用する必要はありません。

0
Cheryl Simon