Robolectric - 包 targetSdkVersion=30 > maxSdkVersion=29

Abh*_*bhi 15 android robolectric

错误:

java.lang.IllegalArgumentException:配置失败:包 targetSdkVersion=30 > maxSdkVersion=29

在 org.robolectric.RobolectricTestRunner.getChildren(RobolectricTestRunner.java:247) 在 org.junit.runners.ParentRunner.getFilteredChildren(ParentRunner.java:534) 在 org.junit.runners.ParentRunner.getDescription(ParentRunner.java:400) 在androidx.test.ext.junit.runners.AndroidJUnit4.getDescription(AndroidJUnit4.java:149) 在 org.junit.runners.model.RunnerBuilder.configureRunner(RunnerBuilder.java:81) 在 org.junit.runners.model.RunnerBuilder。 safeRunnerForClass(RunnerBuilder.java:72) at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:37) at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:70) at org.junit .internal.requests.ClassRequest.createRunner(ClassRequest.java:28) 在 org.junit.internal.requests.MemoizingRequest.getRunner(MemoizingRequest.java:19) 在 com。intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:50) 在 com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) 在 com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStart(JUnitStart) java:220) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53) 由:java.lang.IllegalArgumentException: Package targetSdkVersion=30 > maxSdkVersion=29 at org.robolectric.plugins.DefaultSdkPicker.configuredSdks (DefaultSdkPicker.java:118) 在 org.robolectric.plugins.DefaultSdkPicker.selectSdks(DefaultSdkPicker.java:69) 在 org.robolectric.RobolectricTestRunner.getChildren(RobolectricTestRunner.java:213) ... 13 更多java:33) 在 com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220) 在 com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53) 引起:java.lang.IllegalArgumentException :在 org.robolectric.plugins.DefaultSdkPicker.configuredSdks(DefaultSdkPicker.java:118) 在 org.robolectric.plugins.DefaultSdkPicker.selectSdks(DefaultSdkPicker.java:69) 在 org.robolectric.plugins.selectSdks(DefaultSdkPicker.java:69) 在 org.robolectric. getChildren(RobolectricTestRunner.java:213) ... 13 更多java:33) 在 com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220) 在 com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53) 引起:java.lang.IllegalArgumentException :在 org.robolectric.plugins.DefaultSdkPicker.configuredSdks(DefaultSdkPicker.java:118) 在 org.robolectric.plugins.DefaultSdkPicker.selectSdks(DefaultSdkPicker.java:69) 在 org.robolectric.plugins.selectSdks(DefaultSdkPicker.java:69) 在 org.robolectric. getChildren(RobolectricTestRunner.java:213) ... 13 更多118) 在 org.robolectric.plugins.DefaultSdkPicker.selectSdks(DefaultSdkPicker.java:69) 在 org.robolectric.RobolectricTestRunner.getChildren(RobolectricTestRunner.java:213) ... 13 更多118) 在 org.robolectric.plugins.DefaultSdkPicker.selectSdks(DefaultSdkPicker.java:69) 在 org.robolectric.RobolectricTestRunner.getChildren(RobolectricTestRunner.java:213) ... 13 更多

如何解决这个问题?

Abh*_*bhi 22

发现这个帖子有同样的问题,有不同的错误信息。
这个答案帮助我解决了这个问题。

在这里发布相同的内容。

使用以下行在目录中创建一个robolectric.properties文件app/src/test/resources

sdk=29  
Run Code Online (Sandbox Code Playgroud)

这将强制 Robolectric 使用 API 29 而不是 30。

注意: Robolectric 现在最多支持 SDK 29(截至 2020 年 9 月 4 日)。

  • 当您实现 Android 12 时。最新错误 `Package targetSdkVersion=31 > maxSdkVersion=30` Robolectric 不支持预发布 Android S 的解决方案相同。编译 https://github.com/robolectric/robolectric/issues/6635 (5认同)

raj*_*r21 11

上述两个答案都工作正常,但最新版本的 robolectric 支持 android sdk 30。

因此,只需升级 robolectric 依赖项即可解决该问题。

在撰写本文时,最新版本是 4.5.1。

如需最新版本,请参阅官方github站点。


Mah*_*alv 10

您还可以使用Config注释来限制您的测试目标 SDK 。这使您可以为不同的测试考虑不同的配置或避免创建额外的配置文件。

@Config(sdk = [29])
class Test {
 // ...
}
Run Code Online (Sandbox Code Playgroud)