web-dev-qa-db-fra.com

Robolectric prend-il en charge le niveau API?

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?

69
Kitesurfer

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.

86
Saad Farooq

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.

28
Nicks

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?

10
James Muranga