2011-10-25 13 views
5

アンドロイド計測器を実行しようとしています。コマンドラインを使用してJunitテストを実行しています。次のコマンドを使用しています。特定の順序でクラスを持つパッケージでアンドロイド計測を使用してJunitテストを実行します

adb shell am instrument -w com.android.foo/android.test.InstrumentationTestRunner 

マイアンドロイドプロジェクトパッケージは、(アルファベット順)

com.android.foo

ActivityTest

ContactsTest

LaunchTest

SendTest

をJavaソースファイルを以下ました

上記のコマンドを使用してテストを実行すると、まずActivityTestの実行が開始されます。これは私が欲しいものではありません、私はそれがまずContactTest、SendTestとActivityTestに続いてLaunchTestを実行したい。私は

adb shell am instrument -w -e class com.android.foo.LaunchTest,com.android.foo.ContactTest com.android.foo/android.test.InstrumentationTestRunner 

を使用してみましたが、それは私が私のコードでTestCaseクラスを使用していないため、エラーがかもしれ私を与えますが、代わりに私のLaunchTestと他の人がActivityInstrumentationTestCase2を拡張します。

ご了承ください。

+1

を、それが意味します彼らはお互いに依存している。単体テストは、それぞれが完全に独立しており、実行順序は問題ではないように記述する必要があります。 – elevine

+0

@ Noble6アップデート:テストケースhttp://goo.gl/ac06C0をデモしてテストケースを作成するAndroidスタジオhttp://goo.gl/bQFlmU – nitesh

答えて

6

を、私は最終的には、以下のコマンドを使用して動作するようになった:あなたが特定の順序でテストを実行していることに興味があるので

adb shell am instrument -e class com.android.foo.LaunchTest -w com.android.foo/android.test.InstrumentationTestRunner 
+0

LaunchTestと同じディレクトリからこのコマンドをどのディレクトリに実行しましたか? –

0

テストの順序が重要な場合、テストは脆く、リファクタリングする必要があります。彼らはお互いに依存し、理想的にはテストは独立しているということです。通常、ほとんどのテストは非常に独立しており、細分化されており、ユニットテストと呼ばれています。

この種の依存関係を解消する一般的な方法は、TestCaseでsetup()teardown()のメソッドを使用することです。ここでは、テストが実行する可能性のある変更を実行してクリーンアップするテストを準備することができます。言われて、android.test.InstrumentationTestRunnerは、あなたのテストスイートをreordingためのオプションを持っていないことを


。しかし、これは2つの方法で行うことができます。

1)特別な発注を行うandroid.test.InstrumentationTestRunnerの独自の実装を作成することができます。これにより、柔軟性が最大限に向上しますが、さらに時間がかかることがあります。

2)am instrumentはクラス名を引数として取ることができます。テストを順番に実行することができますが、複数のコマンドを実行することもできます(おそらくbashスクリプトで組み合わせる)。これは、引数 "-e class [test of classname]"を追加することによって行われます。

adb shell am instrument -w -e class com.android.foo.LaunchTest,com.android.foo.ContactTest com.android.foo/android.test.InstrumentationTestRunner 

は、二つのクラスのために実行しようとします:


はまた、あなたのテストを実行している途中でエラーがあります。あなたはこれにそれを変更する必要があり、このためには:

adb shell am instrument -w -e class com.android.foo.LaunchTest com.android.foo/android.test.InstrumentationTestRunner 
adb shell am instrument -w -e class com.android.foo.ContactTest com.android.foo/android.test.InstrumentationTestRunner 
+0

ありがとう、私はすでにsetup()とteardown()を使用していますが、 LaunchTestはアプリを起動してクライアントを登録するので、他のすべてのテストを実行する最初のテストでない場合、デバイスの画面が登録画面でハングアップするため、テストに失敗します。 -eクラスを使用しようとすると、インストルメンテーション情報を見つけることができないというエラーが発生します。 –

+0

"-e class"で指定できるクラスは1つだけです。おそらく、登録テストを除外してセットアップ中に登録を実行することができます。 – spatulamania

+0

1つのクラスを指定していますが、まだ失敗しています。クラスについて言及していない場合は、テストが実行されます。 –

関連する問題