J'ai un test que je voudrais exécuter avec Robolectric, j'utilise le 2.3-SNAPSHOT car mon APP utilise l'ActionbarCompat dont j'avais besoin pour utiliser la version 2.3-SNAPSHOT car Robolectric n'a pas pu trouver les thèmes AppCompat auparavant. J'ai donc configuré le Classpath dans Eclipse et je me retrouve avec ceci:
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)
Le manifeste de mon projet de test est comme ceci:
<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>
Je me plains toujours du niveau API, peu importe ce que j'utilise.
Quelqu'un a-t-il réussi à le faire fonctionner?
Mise à jour: L'annotation est maintenant @Config(sdk = 18)
(ou @Config(sdk = Build.VERSION_CODES.JELLY_BEAN_MR2)
) et le fichier de propriétés mentionné dans le lien est maintenant robolectric.properties
.
Réponse originale: Vous pouvez utiliser le @Config
annotation pour que Robolectric émule une version SDK. Vous pouvez mettre ceci:
import org.robolectric.annotation.Config;
@Config(emulateSdk = 18) // now @Config(sdk = 18) as of Robolectric 3.0
@RunWith(RobolectricTestRunner.class)
public class SomeTest ...
Ceci est également possible en utilisant un fichier comme mentionné ici
Je ne sais pas ce que cela signifie pour vos tests spécifiques KitKat, mais au moins les autres devraient fonctionner.
Dans le cas où des gens comme moi, visitant toujours le lien pour l'erreur similaire,
@Config(emulateSdk = )
ne fonctionne pas maintenant. Son changé en sdk--@Config(constants = BuildConfig.class, sdk=21)
Pour moi, je recevais une erreur avec la version cible 22,
Java.lang.UnsupportedOperationException: Robolectric does not support API level 22
et donc je l'ai émulé à 21.
Selon SdkConfig.Java , Roboelectric ne prend en charge que les versions/niveaux d'API suivants:
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"));
Êtes-vous sûr de les avoir essayés?