Androidのドキュメントにあるように、「AndroidテストAPIはJUnit4ではなくJUnit3コードスタイルをサポートしていることに注意してください。」( テスト基本 )AndroidではJUnit4をそのまま使用できないことは明らかです。
しかし、なぜそうなのでしょうか?テストはDVM内で実行されるためでしょうか(AndroidランタイムはJUnit 3のみをサポートしています)?JVMでは、JVM自体で、使用するJUnitランタイムを選択できます。これはDVM内では不可能ですか?
2015/10更新
Android Testing Support Library の一部であるAndroidJUnitRunnerを介して可能になりました。つまり、Gradleベースのプロジェクトで次のことを行う必要があります。
依存関係を追加します。
_dependencies {
compile 'com.Android.support:support-annotations:22.2.0'
androidTestCompile 'com.Android.support.test:runner:0.4.1'
}
_
TestInstrumentationRunnerを指定します。
_Android {
defaultConfig {
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
}
}
_
テストクラスに@RunWith(AndroidJUnit4.class)
アノテーションを付けます。
Espressoセットアップ手順 も参照してください。プレーンなJUnit4テストにはEspresso自体は必要ないことに注意してください。
なぜそれが必要なのか
このトピックに関してインターネットで見つけることができる情報はほとんどありません。私が見つけた最高のものは InstrumentationTestRunner の情報でした。
JUnit4テストが他のAndroidコードと同じように、Javaデバイスで実行されるのを妨げるものは何もありません。ただし、Androidテストフレームワークはいくつかの追加作業を行います。
上記は、JUnit3専用のいくつかの拡張機能によって実行されます。
このJUnit3固有のコードは、コアAndroidシステムの一部を形成するInstrumentationTestRunnerの一部のようです。ただし、AndroidJUnitRunnerで明らかなように、JUnit4をサポートするカスタムテストランナーを使用することは可能です。または他のフレームワーク。
説明はこちら:
http://d.hatena.ne.jp/esmasui/20120910/1347299594
問題は InstrumentationTestRunner
の実装から発生することがわかりました。
著者の解決策は AndroidJUnit4 プロジェクトです。