Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does Robolectric support API level?

I have some Test which I would like to run with Robolectric, I use the 2.3-SNAPSHOT as my APP uses the ActionbarCompat i needed to use 2.3-SNAPSHOT Version as Robolectric could not find the AppCompat Themes before. So I setup the Classpath in Eclipse and I end up with this:

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) 

The Manifest of my Test Project is like this:

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

I complains always about the API Level, no matter what i use.

Anyone got this working ?

like image 320
Kitesurfer Avatar asked Dec 12 '13 10:12

Kitesurfer


People also ask

Where do you put Robolectric properties?

properties File. To configure all Robolectric tests within a package or group of packages, create a file named robolectric. properties in the appropriate package. Generally, this file would be placed within the appropriate package directory under src/test/resources in your project tree.


1 Answers

Update: The annotation is now @Config(sdk = 18) (or @Config(sdk = Build.VERSION_CODES.JELLY_BEAN_MR2)) and the properties file mentioned in link is now robolectric.properties.

Original Answer: You can use the @Config annotation to have Robolectric emulate an SDK version. You can put this :

import org.robolectric.annotation.Config;  @Config(emulateSdk = 18) // now @Config(sdk = 18) as of Robolectric 3.0 @RunWith(RobolectricTestRunner.class) public class SomeTest ... 

This is also possible using a file as mentioned here

Not sure what it means for your KitKat specific tests but at least the others should work.

like image 51
Saad Farooq Avatar answered Oct 11 '22 14:10

Saad Farooq