所有的测试都通过了,但我得到了以下警告。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
这是我的秤:
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"
}发布于 2019-07-10 10:40:31
在您的测试类中,您需要使用@Config作为参数使用sdk数组进行注释。
@Config(sdk = {Build.VERSION_CODES.O_MR1})
class SampleTest {}为科特林
@Config(sdk = [Build.VERSION_CODES.O_MR1])
class SampleTest {}你的测试应该运行。
发布于 2020-01-08 15:50:11
罗波列克4.3.1增加了对API 29的支持,但是.有以下要求:
在Android 29上运行测试现在严格要求Java9运行时或更新。
因此,如果您的目标是API 29或更高版本,您必须使用Java9运行您的Robolectric。
更新28/07/21:在Android中使用Java 11
AndroidStudio北极圈福克斯2020.3.1 (带有AGP 7.0)现在捆绑JDK 11,并默认配置Gradle来使用它。
参考:
更新26/08/20:在Android中使用Java 9
由于AndroidStudio3.6.0,您可以在“文件/项目结构”对话框中设置JDK9,而不会出现问题。

此外,Android还将在4.2 (更多信息)中开始使用JDK 11。
旧答案:
不幸的是,您还不能将Android项目配置为使用JDK9 (如Android 3.5.3那样):

但是,可以将目标JRE从测试运行配置(Run / Edit Configuration)更改为Run / Edit Configuration:

使用Java 8保持Robolectric
如果您不想/不能使用Java 9,有几个解决办法可以使用Java 8运行您的测试:
配置Robolectric以在整个项目中模拟一个较低的SDK:
robolectric.properties下创建一个app/src/test/resources文件。robolectric.properties
sdk=28注意:如果您有一个多模块项目,理论上您可以在项目的根目录中有一个robolectric.properties。但我不能让它成功..。因此,不幸的是,我不得不复制每个模块的文件,例如core/src/test/resources。
博士:robolectric.properties文件
在一个特定的测试中配置Robolectric来模拟一个较低的SDK:
如果您不想为整个项目配置模拟SDK,可以使用Robolectric @Config注释为单个测试配置它:
@RunWith(AndroidJUnit4::class)
@Config(sdk = [Build.VERSION_CODES.P])
class MyRobolectricTest {...}博士:@Config注释
为什么Robolectric需要Java 9来支持Android?
Robolectric使用AOSP构建工具链来构建。对于Q,被更新为使用java9,从而生成java9字节码(版本53类文件)。在java8 SDK上尝试在Q上运行Robolectric测试将失败,错误如下:
java.lang.UnsupportedClassVersionError: org/xmlpull/v1/XmlPullParser has been compiled by a more recent version of the Java Runtime (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0Android中的Dx也被更新,以支持53版本的类文件。因为Robolectric使用这些Framework,所以没有办法要求Java。(更多信息)
发布于 2019-07-03 20:39:49
注释您的测试
@Config(sdk = Build.VERSION_CODES.O_MR1)或sdk = 27。注释可以位于导致错误的类或测试方法之上。
您可能仍然会收到需要Java 9的警告,但是测试将针对受支持的SDK运行。
https://stackoverflow.com/questions/56821193
复制相似问题