33

Android のドキュメントにあるように、「Android テスト API は JUnit 3 コード スタイルをサポートしていますが、JUnit 4 はサポートしていないことに注意してください。」(基礎のテスト)。JUnit 4 はそのままでは Android で使用できないことは明らかです。

しかし、なぜこれが事実なのですか?テストが DVM 内で実行されるためでしょうか (Android ランタイムは JUnit 3 のみをサポートしています)。JVM では、使用する JUnit ランタイムを独自に選択できます。これは DVM 内で可能ではありませんか?

4

2 に答える 2

40

2015年10月更新

これは、Android Testing Support Libraryの一部である AndroidJUnitRunner を介して可能になりました。つまり、Gradle ベースのプロジェクトで次のことを行う必要があります。

  1. 依存関係を追加します。

    dependencies {
        compile 'com.android.support:support-annotations:22.2.0'
        androidTestCompile 'com.android.support.test:runner:0.4.1'
    }
    
  2. testInstrumentationRunner を指定します。

    android {
        defaultConfig {
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
    }
    
  3. テスト クラスに で注釈を付けます@RunWith(AndroidJUnit4.class)

  4. 通常の JUnit4 スタイルでテストを記述します。

Espresso のセットアップ手順も参照してください。プレーンな JUnit4 テストには Espresso 自体は必要ないことに注意してください。

必要な理由

このトピックに関してインターネット上で見つけることができる情報はほとんどありません。私が見つけた最高のものは、InstrumentationTestRunnerに関する情報でした。

他の Java コードと同様に、Android デバイスでの JUnit4 テストの実行を妨げるものは何もありません。ただし、Android テスト フレームワークはいくつかの追加作業を行います。

  1. ADB 経由でテスト結果を開発マシンに送り返します。
  2. インストルメンテーションを行います(これが正確に何を意味するのかはわかりません)。

上記は、JUnit3 専用のいくつかの拡張機能によって実行されます。

この JUnit3 固有のコードは、コア Android システムの一部を形成する InstrumentationTestRunner の一部のようです。ただし、AndroidJUnitRunner で明らかなように、JUnit4 またはその他のフレームワークをサポートするカスタム テスト ランナーを使用することができます。

于 2012-08-11T18:00:00.080 に答える
2

解説(日本語)はこちら:

http://d.hatena.ne.jp/esmasui/20120910/1347299594

の実装から問題が発生することがわかりましたInstrumentationTestRunner

著者のソリューションはAndroidJUnit4プロジェクトです。

于 2012-11-28T18:50:08.333 に答える