70 votes

Robolectric ne supporte pas le niveau API

J'ai quelques tests que je voudrais exécuter avec Robolectric, j'utilise la version 2.3-SNAPSHOT car mon APP utilise l'ActionbarCompat ; j'avais besoin d'utiliser la version 2.3-SNAPSHOT car Robolectric ne pouvait pas trouver les thèmes AppCompat avant. 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 de l'API, peu importe ce que j'utilise.

Quelqu'un l'a fait fonctionner ?

86voto

Saad Farooq Points 2507

Vous pouvez utiliser le @Config pour que Robolectric émule une version du SDK. Vous pouvez mettre cette annotation :

@Config(emulateSdk = 18) 
@RunWith(RobolectricTestRunner.class)
public class SomeTest ...

Cela est également possible en utilisant un fichier comme mentionné aquí

Je ne sais pas ce que cela signifie pour vos tests spécifiques à KitKat mais au moins les autres devraient fonctionner.

10voto

James Muranga Points 184

En fonction de https://github.com/robolectric/robolectric/blob/master/src/main/java/org/robolectric/SdkConfig.java

il ne prend en charge que les niveaux 16, 17 et 18 de l'API.

Etes-vous sûr d'avoir essayé ceux-là ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X