1

Android アプリケーションに標準の JUnit 3.x (または JUnit4.x) テストを含める方法を見つけようとしています。Android 単体テスト ツールよりも JUnit を使用したいのは、JUnit の方が高速で、IDE で直接実行できるためです (Android JUnit ツールを最初にデバイスまたはエミュレーターにデプロイする必要があります)。また、JUnit を使用して適切な SoC (関心の分離) を課したいと考えています。もともと私はこれを可能にするために複数のモジュールをセットアップしていました。メイン Android モジュールとコア ライブラリ モジュールです。メイン モジュールにはすべての Android 仕様が含まれ、コア モジュールには Plain Old Java Objects (POJO) と JUnit の利点が含まれます。

最近、低レベルの Android 固有の作業を処理し、それを高レベルの操作としてメイン モジュールに公開するライブラリを開発した Android プロジェクトに取り組み始めました。問題は、ライブラリ モジュールで JUnit を使用する必要があることですが、そのために別のモジュールを分割したくありません。理想的な世界では、次のようになります。

メイン モジュール: アクティビティ、フラグメントなどの間を移動するためのすべての高レベル UI およびコントローラー ロジックが含まれます。MyLib に依存します。

MyLib: Android 固有のネットワーク、永続性、加速度計の読み取りなどを処理するための低レベル ロジックをラップする高レベル インターフェイスが含まれています。低レベル ロジックの一部には多数の POJO が含まれています。これらのインターフェイスを直接実行するためのサンプル アプリまたはデモ アプリも含まれています。POJO で JUnit を実行する機能が含まれています。

私はパイプの夢を生きていますか、それとも現在の開発ツールを使用してこれをインテリジェントに設定する方法はありますか? 私は主に IntelliJ Idea を使用していますが、Eclipse 固有のソリューションにも対応しています。

4

2 に答える 2

2

JUnit テスト ランナーでテストを直接実行する際に遭遇する問題は、com.android.* クラスを呼び出すことができないことです。これは、android.jar 内のこれらのクラスが SDK でスタブ化されているためです。これらの Dalvik-byte コード バージョンのみが、エミュレータでのみ実行される実際の実装を持っています。

com.android.* クラスへの呼び出しを回避することは非常に困難です。特に、非常に多くの Android メソッドが Context を必要とする場合はなおさらです。

エミュレーターの起動とコードの実行が遅いため、私もこれに少し不満を感じています。これにより、テスト開発が非常に面倒になります。

エミュレータなしで JUnit テスト ランナーを使用した唯一の幸運は、私のプロジェクト ファイルを指す別の非 Android プロジェクトを作成することです。これにより、エミュレーターの外で JUnit を起動することができましたが、実際にテストできるクラスは非常に限られていました。

于 2013-01-14T17:36:34.810 に答える
0

要するに

  • クラスと静的メソッドのテストには Junit を使用します。
  • インストルメンテーションを使用して、アプリの click-ux 応答をテストする

インストルメンテーションは、始めるのが面倒で、習得するのに時間がかかります。したがって、Hello World に多くの時間を投資してください。まったく新しい世界です。

于 2013-01-14T18:24:33.637 に答える