すべてのテストに合格していますが、以下の警告が表示されます。 RobolectricからJava 9が必要です。Robolectricの最新バージョンを使用しています。
[Robolectric] WARN: Android SDK 10000 requires Java 9 (have Java 8). Tests won't be run on SDK 10000 unless explicitly requested.
[Robolectric] com.example.testcaseWithRobolectric.MainActivityTest.testAllElements: sdk=28; resources=BINARY
Called loadFromPath(/system/framework/framework-res.apk, true); mode=binary sdk=28
プロセスは終了コード0で終了しました
これは私のGradleです。
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.Android.support:appcompat-v7:28.0.0'
implementation 'com.Android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.Android.support.test:runner:1.0.2'
androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.2'
implementation project(path: ':domain_layer')
testImplementation "org.robolectric:robolectric:4.3"
}
defaultConfig {
applicationId "com.example.testcaseWithRobolectric"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
}
テストクラスでは、sdkの配列をパラメーターとして@Configで注釈を付ける必要があります。
@Config(sdk = [Build.VERSION_CODES.O_MR1])
class SampleTest {}
テストが実行されます。
Robolectric 4.3.1 API 29のサポートが追加されましたが、次の要件があります。
Android API 29でテストを実行するには、Java9ランタイム以降が厳密に必要になります
したがって、API 29をターゲットにしている場合は、Java9を使用してRobolectricを実行する必要があります。
残念ながら、まだAndroid StudioプロジェクトでJDK9を使用するように設定することはできません(Android Studio 3.5.3)として):
ただし、ターゲットJREをテスト実行構成(Run / Edit Configuration
)からJDK9に変更できます。
Java 9を使用したくない、または使用できない場合は、Java 8を使用してテストを実行できるようにするためにいくつかの回避策があります。
プロジェクト全体で下位SDKをエミュレートするようにRobolectricを構成します:
robolectric.properties
の下にapp/src/test/resources
ファイルを作成します。robolectric.properties
sdk=28
注:マルチモジュールプロジェクトの場合、理論的には global robolectric.properties
をプロジェクトのルートディレクトリに置くことができます。しかし、それを機能させることはできませんでした...したがって、残念ながら、すべてのモジュールのファイルを複製する必要がありました。 core/src/test/resources
。
ドキュメント: robolectric.propertiesファイル
特定のテストで下位のSDKをエミュレートするようにRobolectricを構成します:
エミュレートされたSDKをプロジェクト全体で構成したくない場合は、Robolectric @Config
アノテーションを使用して、個別のテスト用に構成できます。
@RunWith(AndroidJUnit4::class)
@Config(sdk = [Build.VERSION_CODES.P])
class MyRobolectricTest {...}
ドキュメント: @ Configアノテーション
テストに注釈を付ける
@Config(sdk = Build.VERSION_CODES.O_MR1)
またはsdk =27。アノテーションは、エラーの原因となっているクラスまたはテストメソッドの上に配置できます。
Java 9が必要です)という警告が引き続き表示される場合がありますが、テストはサポートされているSDKに対して実行されます。
Java 9で実行する必要があるのは、Androidに対してテストする場合のみです。Q。 https://github.com/robolectricの互換性セクションを確認してください。 /robolectric/releases/tag/robolectric-4.