【问题标题】:Robolectric 4.3.1 fails with message: Android 29 requires Java 9 (have Java 1)Robolectric 4.3.1 失败并显示消息:Android 29 需要 Java 9(具有 Java 1)
【发布时间】:2019-10-15 20:27:20
【问题描述】:

我正在尝试通过 robolectric 运行我的 android 测试,但它收到以下错误消息:

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)
...

我安装的JDK版本是13。

我已将android.enableUnitTestBinaryResources=true 添加到gradle.properties 并在build.gradle 中配置testOptions.unitTests.includeAndroidResources = true

我的测试运行器是 AndroidJUnit4::class,如 Robolectric 4.x 文档中所述。

【问题讨论】:

  • 提示隐藏在更新日志中:github.com/robolectric/robolectric/releases/tag/… 在 Android Studio 中更改测试运行配置以使用 Java 13 作为其 JRE。
  • 我为模块“app”和“Android JUnit”模板指定了我的 jdk13,但我仍然收到错误消息。也许是因为我的compileOptionscompileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
  • 我真的不知道。还有一件事,您是否尝试过使用 JDK 9?如果 Android 10 与 Java 9 相结合,而 Robolectric 坚持 Java 9 与 Android 10 相匹配......也许他们真的想要 Java 9,而不是 9+。
  • 嗯,在更新日志中,他们说 Java 9+,但我会尝试,谢谢!
  • @the_dani 你找到解决办法了吗?

标签: android unit-testing kotlin robolectric


【解决方案1】:

订购 Robolectric 版本特别是 4.3.1 存在问题。只需将 Robolectric 版本升级到 4.5.1 或更高版本。

 implementation "org.robolectric:robolectric:4.5.1"

谢谢。

【讨论】:

    【解决方案2】:

    Robolectric 目前仅识别具有正确格式 (X.XX.XX) 的版本字符串的 JDK: https://github.com/robolectric/robolectric/issues/5303#issuecomment-547029317.

    此外,仅从 Gradle 6.0 开始支持使用 JDK 13 构建。

    【讨论】:

      猜你喜欢
      • 2019-11-11
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 2023-03-10
      • 2017-08-19
      相关资源
      最近更新 更多