Android Robolectric是否支持API级别?
我有一些测试,我想用Robolectric运行,我使用2.3-SNAPSHOT,因为我的应用程序使用ActionbarCompat,我需要使用2.3-SNAPSHOT版本,因为Robolectric以前找不到AppCompat主题。因此,我在Eclipse中设置了类路径,结果如下:Android Robolectric是否支持API级别?,android,robolectric,Android,Robolectric,我有一些测试,我想用Robolectric运行,我使用2.3-SNAPSHOT,因为我的应用程序使用ActionbarCompat,我需要使用2.3-SNAPSHOT版本,因为Robolectric以前找不到AppCompat主题。因此,我在Eclipse中设置了类路径,结果如下: java.lang.UnsupportedOperationException: Robolectric does not support API level 9, sorry! at org.robolectric
java.lang.UnsupportedOperationException: Robolectric does not support API level 9, sorry!
at org.robolectric.SdkConfig.<init>(SdkConfig.java:24)
at org.robolectric.RobolectricTestRunner.pickSdkVersion(RobolectricTestRunner.java:288)
at org.robolectric.RobolectricTestRunner.getEnvironment(RobolectricTestRunner.java:264)
at org.robolectric.RobolectricTestRunner.access$100(RobolectricTestRunner.java:57)
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:186)
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:172)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
java.lang.UnsupportedOperationException:Robolectric不支持API级别9,抱歉!
位于org.roblectric.SdkConfig(SdkConfig.java:24)
位于org.roblectric.roblectricttestrunner.pickSdkVersion(roblectricttestrunner.java:288)
位于org.roblectric.roblectrictTestRunner.getEnvironment(roblectrictTestRunner.java:264)
访问org.roblectric.roblectricttestrunner.access$100(roblectricttestrunner.java:57)
位于org.roblectric.roblectrictTestRunner$2.evaluate(roblectrictTestRunner.java:186)
位于org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
位于org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
位于org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
位于org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
位于org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
位于org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
访问org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
位于org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
位于org.roblectric.roblectrictTestRunner$1.evaluate(roblectrictTestRunner.java:172)
位于org.junit.runners.ParentRunner.run(ParentRunner.java:236)
位于org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
位于org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
我的测试项目清单如下所示:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.vendor.test"
android:versionCode="1"
android:versionName="1.0">
<application>
<uses-library android:name="android.test.runner" />
</application>
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="19" />
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.vendor" />
</manifest>
无论我使用什么,我总是抱怨API级别
是否有人能正常工作?根据,Roboelectric仅支持以下版本/API级别:
SUPPORTED_APIS.put(Build.VERSION_CODES.JELLY_BEAN, new SdkVersion("4.1.2_r1", "0"));
SUPPORTED_APIS.put(Build.VERSION_CODES.JELLY_BEAN_MR1, new SdkVersion("4.2.2_r1.2", "0"));
SUPPORTED_APIS.put(Build.VERSION_CODES.JELLY_BEAN_MR2, new SdkVersion("4.3_r2", "0"));
SUPPORTED_APIS.put(Build.VERSION_CODES.KITKAT, new SdkVersion("4.4_r1", "0"));
SUPPORTED_APIS.put(Build.VERSION_CODES.LOLLIPOP, new SdkVersion("5.0.0_r2", "0"));
你确定你已经试过了吗?更新:注释现在是
@Config(sdk=18)
(或者@Config(sdk=Build.VERSION\u CODES.JELLY\u BEAN\u MR2)
),链接中提到的属性文件现在是robolectric.properties
原始答案:
您可以使用@Config
注释让Robolectric模拟SDK版本。你可以这样说:
import org.robolectric.annotation.Config;
@Config(emulateSdk = 18) // now @Config(sdk = 18) as of Robolectric 3.0
@RunWith(RobolectricTestRunner.class)
public class SomeTest ...
这也可以使用前面提到的文件
不确定这对KitKat特定测试意味着什么,但至少其他测试应该有效。如果像我这样的人仍然访问链接以发现类似错误
@Config(emulateSdk=)
现在不工作。
它已更改为sdk--@Config(constants=BuildConfig.class,sdk=21)
对我来说,我的目标版本22出现了错误
java.lang.UnsupportedOperationException: Robolectric does not support API level 22
因此,我将其模拟为21。您是否尝试将miniumum sdk更改为8并查看?我也累了18。当我在处理一些与KitKat相关的东西时,我需要使用API级别19。有人知道为什么它不支持API级别19吗?他们已经将文件移到了这里,并添加了对版本4.4_r1和5.0.0_R2的支持。它对我来说是有效的,现在在API 18上并不重要。谢谢谢谢有没有一种方法可以在全球范围内进行设置?我不想在每次测试时设置(希望稍后取消设置)。根据我放在那里的链接,一个
org.roblectric.Config.properties
文件应该为您的整个项目执行此操作。有没有办法在测试级别而不是类级别执行此操作?我在一个类中的行为会根据API级别进行更改,并希望对其进行测试。@Config(emulateSdk=18)
将不再工作。它需要是@Config(sdk=Build.VERSION\u CODES.JELLY\u BEAN\u MR2)
,等等!请问你是怎么发现这个的?我在任何地方都找不到它。我在从3.0-rc2升级到3.0的过程中遇到了其他类似的问题,我确信这些问题必须在某处记录下来。。。!甚至我都在磕头。这里有一个快速的维基参考,可能对你有用:-)