2012-02-17 7 views
0

私のアンドロイドアプリのテストプロジェクトでは、最初にいくつかの低レベルクラスのテストがありました。低レベルでは、彼らは活動、サービス、または何か特定のものではないことを意味します。彼らは仕様に従っていくつかの作業を行うクラスです。彼らは、アプリケーションコンテキスト(データベース、リソースなど)からの情報を中継します。ユニットテストのアンドロイドクラス

すべてのテストは緑色で、満足しています。突然私のグリーンテストが失敗し始めたアクティビティをテストするためにラインナップに別のテストクラスを追加した後。私が追加したアクティビティテストは緑ですが、以前はグリーンになっていたテストのいくつかは例外をスローします。

dalvikのトレースからは、私の使用されている緑色のテストではアプリケーションコンテキスト以外のものは必要ありませんが、システムはまだアクティビティを再開しようとしています。新しいテスト)。

ここで私の質問です:どのように単なるアプリケーションのコンテキストを必要とするクラスをテストすることができます何か他の何か?ランタイムが何も気にしない活動を開始しようとしないようにするにはどうすればよいですか?

+0

[Robotium](http://code.google.com/p/robotium/)を見ると、かなりうまく動作します。 Seleniumを使用したことがある場合、いくつかの面を理解しておく必要があります。 – Android

+0

@Android彼は単体テストを望んでいます。 Robotiumは、ユニットテストではなく[ブラックボックス](http://en.wikipedia.org/wiki/Black-box_testing)テスト用です。あなたが本当に[単体テスト](http://ja.wikipedia.org/wiki/Unit_testing)Androidアプリケーションを望むなら、Robolectricが唯一の方法です。 –

答えて

2

あなたのユニットテストからAndroidを除外したいような音です。このためにMockを使用することができればうれしいですが、残念ながらAndroidフレームワークを使用すると、物事を模倣しようとするさまざまな問題が発生します。

アンドロイドを「デパング」するにはRobolectricを使用することを強くお勧めします。気にしないものをモックするにはMockitoを使用してください。これにより、JVM上で単体テストを実行し続けることができます(私はここで仮定しています)。

+0

ローカルでテストを実行するのはいいですが、これは私が現時点でバイトオフすること以上のものです – mfeingold

+0

それは見た目が悪くないし、IMOはAndroidのテストフレームワークを扱うよりもずっと簡単です。 Robolectricを設定する手順は、Eclipseを使用している場合は[here](http://pivotal.github.com/robolectric/eclipse-quick-start.html)にあります。セットアップで約15分かかります。実際の単体テストを書くことを考えているなら、これはユニットテストがすべてあなたのクラスを分離することになるので、そうすることをお勧めします。そうすれば、Androidを邪魔にならず、それらのクラスを模擬することができます。現在テスト中のクラスではありません。 –

0

あなたがこれまでに伝えてきたことを考えると、難しいと言えます。

ユニットテストを実行するのに常にInstrumentationTestRunnerを使用しましたか? InstrumentationとInstrumentationTestRunnerを使用して、コンポーネント(アクティビティ、サービス、コンテンツプロバイダ)やコンテキストなど、Androidフレームワークを使用するものをテストする必要があります。

これは「開発者ガイド」の「テスト」に記載されています。

+0

はい、テストプロジェクトは、InstrumentationTestRunner(そのサブクラス)を実行するように構成されています。 – mfeingold

関連する問題