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