私は、ユーティリティクラスのみ(アクティビティなし)を含むAndroidビットマップクラス(AndroindLibと呼びます)に基づくAndroidライブラリプロジェクトを作成しています。Android JUnitを使用してテストしようとしましたが、AnroidLib.apkが見つからないという不満が何度もあります
Androidライブラリプロジェクトを単体テストする正しい方法は何ですか?
私は、ユーティリティクラスのみ(アクティビティなし)を含むAndroidビットマップクラス(AndroindLibと呼びます)に基づくAndroidライブラリプロジェクトを作成しています。Android JUnitを使用してテストしようとしましたが、AnroidLib.apkが見つからないという不満が何度もあります
Androidライブラリプロジェクトを単体テストする正しい方法は何ですか?
回答:
ドキュメントの引用:
「ライブラリプロジェクトでコードとリソースのテストを設定するには、2つの推奨される方法があります。
ライブラリプロジェクトに依存するアプリケーションプロジェクトを計測するテストプロジェクトを設定できます。その後、ライブラリ固有の機能のテストをプロジェクトに追加できます。
ライブラリに依存する標準アプリケーションプロジェクトをセットアップし、そのプロジェクトにインスツルメンテーションを配置できます。これにより、テスト/計測器とテストするコードの両方を含む自己完結型プロジェクトを作成できます。」
テストプロジェクトで、パッケージ名を変更して、ライブラリのパッケージと同じになるようにします。たとえば、パッケージがであるライブラリがあるとします"com.example.lib"
。ライブラリをターゲットとするテストプロジェクトを作成します。マニフェストファイルにはpackage="com.example.lib.test"
、とが表示されますtargetPackage="com.example.lib"
。パッケージを「com.example.lib.test」から「com.example.lib」に変更するだけです(そのtargetPackage
ままにしておきます)。
また、ライブラリがテストプロジェクトに参照されていることを確認しないで Eclipseでそれがにライブラリとして示されなければならない:Javaのビルド・パスではなく、通常のAndroidのライブラリとしてProject->Properties->Android
タブが、ないでProject->Properties->Java Build Path
タブ。
次に、テストを実行します。
http://www.paulbutcher.com/2010/09/android-library-project-with-tests-step-by-step/は、CommonsWareの回答に2番目の提案を実装するために必要なプロセスを説明するのに役立ちます
ドキュメントごと:
ライブラリモジュールのテストは、アプリのテストと同じです。主な違いは、ライブラリとその依存関係がテストAPKの依存関係として自動的に含まれることです。つまり、テストAPKには独自のコードだけでなく、ライブラリのAARとそのすべての依存関係も含まれています。個別の「テスト対象アプリ」がないため、androidTestタスクはテストAPKのみをインストール(およびアンインストール)します。複数のマニフェストファイルをマージする場合、Gradleはデフォルトの優先順位に従い、ライブラリのマニフェストをテストAPKのメインマニフェストにマージします。
注: このソリューションはEclipse Indigo(3.8.2)の使用に基づいており、基本的な原則は同じですが、別のIDEに対しては少し異なる方法で実装する必要がある場合があります。
私は同様の問題があり、次のことを常に行うことがわかりました:
(注:これらの手順は、新しいプロジェクトグループを最初から構築するためのものです。プロジェクトグループの一部を既に構築している場合は、同じ方法で接続するようにプロジェクトを変更する必要がある場合があります。)
これに似た3つのプロジェクト(Android Library、Android Test App、Android Library Tester)になるはずです。
次のような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を参照してください)
ulitiyクラスがAndroid固有のコードに依存していない場合は、標準のJUnitユニットテストを使用できます。Androidバージョンを使用する必要はありません。