web-dev-qa-db-fra.com

Robolectric ne prend pas en charge le niveau 28 de l'API

Bien que cette question ait été répondue pour les versions précédentes dans d'autres threads, aucune des réponses ne semble fonctionner pour moi avec l'api 28 en ce moment donc ..

Tous les tests Robolectric ont bien fonctionné sur l'api 27. Maintenant, lorsque la cible de mon application api est 28, ils échouent tous.

J'ai

@Config(constants = BuildConfig::class, sdk = [Build.VERSION_CODES.P])

sur ma classe de test.

En plongeant dans SdkConfig.Java interne de Robolectrics, il ressemble à la prise en charge de l'API 28:

addSdk(Build.VERSION_CODES.P, "P", "4651975", "P");

Mais lors de l'évaluation de cette ligne de code dans le débogueur, Build.VERSION_CODES.P Est évalué à 10000. Je ne sais pas ce qui se passe là-bas.

J'utilise Robolectric 3.8, et j'ai également essayé avec la version 4.0 alpha sans succès.

Qu'est-ce que je rate?

Edit: Pour l'instant, je suis juste en train d'exécuter la dernière version (ce que je peux dire) d'api prise en charge, en annotant la ou les classes de test avec @Config(sdk = [Build.VERSION_CODES.O_MR1]). Cela vous donnera Android 8.1.0 (api 27).

14
Algar

Deuxième édition: Ceci est gradué de l'instantané et est maintenant disponible avec

testImplementation 'org.robolectric:robolectric:4.0-beta-1'

c'est-à-dire que vous n'avez plus besoin de la ligne d'instantanés maven.


Edit: Ceci est maintenant corrigé et disponible dans la version snapshot. Dans votre fichier de construction Gradle (au niveau de l'application), ajoutez

repositories {
    maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
}

et

dependencies {
    testImplementation 'org.robolectric:robolectric:4.0-alpha-3-SNAPSHOT'
}

Maintenant que ce problème est mis à jour avec les informations d'un contributeur, il semble qu'il y aura une nouvelle version alpha 4.0 qui corrige le problème au cours de cette semaine.

11
Algar

Pour terminer la réponse d'Algar, vous pouvez contourner temporairement cette erreur (en attendant Robolectric corrige ce problème ) en annotant votre classe de test comme ça:

@RunWith(RobolectricTestRunner::class)
@Config(sdk = [Build.VERSION_CODES.O_MR1])
class YourUnitTests {

...

}

Il forcera Robolectric à utiliser Android API 27.

13
Phil