Search code examples
androidunit-testingkotlinrobolectric

Robolectric 4.3.1 fails with message: Android 29 requires Java 9 (have Java 1)


I'm trying to run my android tests via robolectric, but it get the following error message:

at.guger.moneybook.data.repository.AccountsRepositoryTest STANDARD_ERROR
    [Robolectric] WARN: Android SDK 16 requires Java 8 (have Java 1). Tests won't be run on SDK 16 unless explicitly requested.
    [Robolectric] WARN: Android SDK 17 requires Java 8 (have Java 1). Tests won't be run on SDK 17 unless explicitly requested.
    [Robolectric] WARN: Android SDK 18 requires Java 8 (have Java 1). Tests won't be run on SDK 18 unless explicitly requested.
    [Robolectric] WARN: Android SDK 19 requires Java 8 (have Java 1). Tests won't be run on SDK 19 unless explicitly requested.
    [Robolectric] WARN: Android SDK 21 requires Java 8 (have Java 1). Tests won't be run on SDK 21 unless explicitly requested.
    [Robolectric] WARN: Android SDK 22 requires Java 8 (have Java 1). Tests won't be run on SDK 22 unless explicitly requested.
    [Robolectric] WARN: Android SDK 23 requires Java 8 (have Java 1). Tests won't be run on SDK 23 unless explicitly requested.
    [Robolectric] WARN: Android SDK 24 requires Java 8 (have Java 1). Tests won't be run on SDK 24 unless explicitly requested.
    [Robolectric] WARN: Android SDK 25 requires Java 8 (have Java 1). Tests won't be run on SDK 25 unless explicitly requested.
    [Robolectric] WARN: Android SDK 26 requires Java 8 (have Java 1). Tests won't be run on SDK 26 unless explicitly requested.
    [Robolectric] WARN: Android SDK 27 requires Java 8 (have Java 1). Tests won't be run on SDK 27 unless explicitly requested.
    [Robolectric] WARN: Android SDK 28 requires Java 8 (have Java 1). Tests won't be run on SDK 28 unless explicitly requested.
    [Robolectric] WARN: Android SDK 29 requires Java 9 (have Java 1). Tests won't be run on SDK 29 unless explicitly requested.

at.guger.moneybook.data.repository.AccountsRepositoryTest > testUpdateAccount FAILED
    java.lang.UnsupportedOperationException: Failed to create a Robolectric sandbox: Android SDK 29 requires Java 9 (have Java 1)
...

My installed JDK version is 13.

I've added android.enableUnitTestBinaryResources=true to gradle.properties and configured testOptions.unitTests.includeAndroidResources = true in build.gradle.

My test runner is AndroidJUnit4::class as specified in the Robolectric 4.x docs.


Solution

  • Robolectric currently only recognizes JDKs with a version string in a proper format (X.XX.XX): https://github.com/robolectric/robolectric/issues/5303#issuecomment-547029317.

    Furthermore, building with JDK 13 is only supported from Gradle 6.0 up.