Tous les tests réussissent, mais je reçois l'avertissement ci-dessous. Robolectric me dit que Java 9 est requis. J'utilise la dernière version de Robolectric.
[Robolectric] WARN: Android SDK 10000 requires Java 9 (have Java 8). Tests won't be run on SDK 10000 unless explicitly requested.
[Robolectric] com.example.testcaseWithRobolectric.MainActivityTest.testAllElements: sdk=28; resources=BINARY
Called loadFromPath(/system/framework/framework-res.apk, true); mode=binary sdk=28
Processus terminé avec le code de sortie 0
Voici mon Gradle:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.Android.support:appcompat-v7:28.0.0'
implementation 'com.Android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.Android.support.test:runner:1.0.2'
androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.2'
implementation project(path: ':domain_layer')
testImplementation "org.robolectric:robolectric:4.3"
}
defaultConfig {
applicationId "com.example.testcaseWithRobolectric"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
}
sur votre classe de test, vous devez annoter avec @Config avec un tableau de sdk comme paramètre.
@Config(sdk = [Build.VERSION_CODES.O_MR1])
class SampleTest {}
Vos tests devraient s'exécuter.
Robolectric 4.3.1 ajout du support pour API 29 mais ... avec l'exigence suivante:
Exécuter des tests sur Android API 29 nécessite désormais strictement un runtime Java9 ou plus récent
Donc, si vous ciblez l'API 29, vous devez exécuter votre Robolectric en utilisant Java9.
Malheureusement, vous ne pouvez pas encore configurer votre Android projet Studio pour utiliser JDK9 (comme Android Studio 3.5.3):
Mais vous pouvez changer le JRE cible en JDK9 à partir de votre configuration d'exécution de test (Run / Edit Configuration
):
Si vous ne souhaitez pas/ne pouvez pas utiliser Java 9, il existe quelques solutions pour pouvoir exécuter vos tests à l'aide de Java 8:
Configurez Robolectric pour émuler un SDK inférieur dans l'ensemble du projet:
robolectric.properties
fichier sous app/src/test/resources
.robolectric.properties
sdk=28
Remarque: si vous avez un projet multi-modules, vous pouvez théoriquement avoir un global robolectric.properties
dans le répertoire racine de votre projet. Mais je ne pouvais pas le faire fonctionner ... donc, malheureusement, j'ai dû dupliquer le fichier pour chaque module, par ex. core/src/test/resources
.
Documents: fichier robolectric.properties
Configurez Robolectric pour émuler un SDK inférieur dans un test spécifique:
Si vous ne souhaitez pas configurer le SDK émulé pour l'ensemble du projet, vous pouvez le configurer pour des tests individuels à l'aide de Robolectric @Config
annotation:
@RunWith(AndroidJUnit4::class)
@Config(sdk = [Build.VERSION_CODES.P])
class MyRobolectricTest {...}
Documents: annotation @ config
Annotez votre test avec
@Config(sdk = Build.VERSION_CODES.O_MR1)
ou sdk = 27. L'annotation peut aller au-dessus de la classe ou de la méthode de test à l'origine de l'erreur.
Vous pouvez toujours recevoir l'avertissement que Java 9 est requis, mais le test s'exécutera sur le SDK pris en charge.
Vous devez exécuter sur Java 9 uniquement lorsque vous testez contre Android Q. Vérifiez la section de compatibilité sur https://github.com/robolectric /robolectric/releases/tag/robolectric-4.