Robolectric 不支持 API 28 级

Robolectric does not support API level 28

虽然这个问题已经在其他线程的以前的版本中得到了回答,none 的答案似乎对我现在 api 28 有用,所以..

所有 Robolectric 测试在 api 27 时运行良好。现在当我的应用程序 api 目标为 28 时,它们都失败了。

我有

@Config(constants = BuildConfig::class, sdk = [Build.VERSION_CODES.P])

我的测试 class。

深入研究 Robolectric 的内部 SdkConfig.java 它 看起来 他们添加了对 api 28:

的支持

addSdk(Build.VERSION_CODES.P, "P", "4651975", "P");

但是在调试器中评估该行代码时,Build.VERSION_CODES.P 评估为 10000。不确定那里发生了什么。

我是 运行 Robolectric 3.8,也尝试过 4.0 alpha 版本,但没有成功。

我错过了什么?

编辑: 现在我只是 运行 最新的(据我所知)支持的 api 版本,通过注释测试 class(es) 与 @Config(sdk = [Build.VERSION_CODES.O_MR1])。这会给你 Android 8.1.0 (api 27).

第二次编辑:这已经从快照毕业,现在可用于

testImplementation 'org.robolectric:robolectric:4.0-beta-1'

即您不再需要 Maven 快照行。


编辑: 现在已修复并可在快照构建中使用。在您的 gradle 构建文件(应用级别)中添加

repositories {
    maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
}

dependencies {
    testImplementation 'org.robolectric:robolectric:4.0-alpha-3-SNAPSHOT'
}

现在这个issue is updated with info from a contributor it seems like there will be a new 4.0 alpha release that fixes本周内的问题。

要完成 Algar 的回答,您可以通过像这样注释您的测试 class 来暂时绕过此错误(同时 Robolectric 修复此 issue):

@RunWith(RobolectricTestRunner::class)
@Config(sdk = [Build.VERSION_CODES.O_MR1])
class YourUnitTests {

...

}

它将强制 Robolectric 使用 Android API 27.