En essayant de faire fonctionner Robolectric RC3 dans Android Studio, je reçois
Caused by: Java.lang.RuntimeException: build/intermediates/bundles/debug/AndroidManifest.xml not found or not a file; it should point to your project's AndroidManifest.xml
at org.robolectric.manifest.AndroidManifest.validate(AndroidManifest.Java:120)
at org.robolectric.manifest.AndroidManifest.getResourcePath(AndroidManifest.Java:469)
at org.robolectric.manifest.AndroidManifest.getIncludedResourcePaths(AndroidManifest.Java:475)
at org.robolectric.RobolectricTestRunner.createAppResourceLoader(RobolectricTestRunner.Java:479)
at org.robolectric.RobolectricTestRunner.getAppResourceLoader(RobolectricTestRunner.Java:471)
at org.robolectric.internal.ParallelUniverse.setUpApplicationState(ParallelUniverse.Java:73)
at org.robolectric.RobolectricTestRunner.setUpApplicationState(RobolectricTestRunner.Java:421)
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.Java:234)
J'ai essayé
@Config(manifest = "app/src/main/AndroidManifest.xml", constants = BuildConfig.class, sdk=21)
et j'ai essayé de définir l'emplacement du manifeste dans mon TestRunner, rien n'a fonctionné. Dans le système de fichiers, je vois que le manifeste est
./app/build/intermediates/manifests/full/debug/AndroidManifest.xml
pas à l'endroit que Robolectric recherche. À un moment donné, le manifeste vient d'être ignoré, puis un problème similaire s'est produit pour les ressources, l'application ou Robolectric n'a pas pu trouver une ressource brute utilisée par mon application. C'est dans mon fichier de build:
sourceSets {
main {
Java.srcDirs = ['src/main/Java']
resources.srcDirs = ['src/main/res']
}
test {
Java.srcDirs = ['src/test/Java', 'src/main/Java']
resources.srcDirs = ['src/test/res', 'src/main/res']
}
}
Comment puis-je dire à Robolectric où chercher un manifeste et, plus important encore, où chercher des ressources?
Edit: J'ai vérifié Robolectric à partir de github, je l'ai construit, installé dans mon référentiel local .m2, le fichier gradle fait maintenant référence à la construction SNAPSHOT locale, et je me suis assuré que Gradle n'obtient pas de nouvelle version à partir d'un repo à distance. Puis j'ai copié le RobolectricGradleTestRunner dans mon projet, j'ai changé les lignes où les emplacements des fichiers sont définis: il ne contenait pas le nom du module. Maintenant ça marche.
Je suppose que vous essayez d'exécuter les tests avec JUnit. Vous pouvez essayer deux choses différentes:
@Config
annotation./app
(pour OSX et Linux) ou \app
(Windows), vers le chemin écrit dans la zone de texte. Essayez de courir à nouveau et cela devrait fonctionner.Même problème sur Android Studio. J'ai résolu ce problème pour modifier la configuration de Unit4. Vous pouvez suivre ces choses.
Sur Android Studio.
L'important est $ MODULE_DIR $ .
vous pouvez référencer la capture d'écran suivante. Merci.
J'ai rencontré les mêmes erreurs, nous avons utilisé plusieurs versions et types de build Donc, il y a des étapes pour le faire fonctionner:
Vous devez également définir le répertoire de travail sur $ MODULE_DIR $ sous Windows. http://robolectric.org/getting-started/ devrait dire cela.
Le test unitaire doit être annoté comme ceci:
@RunWith (RobolectricTestRunner.class) @Config (constants = BuildConfig.class, sdk = 21, manifest = "src/main/AndroidManifest.xml", packageName = "com.example.yourproject") classe publique SomeFragmentTest {
Dans le cas où vous obtenez toujours cette erreur avec Android Studio 3.0, assurez-vous que votre configuration Gradle a ces paramètres:
Android {
...
testOptions {
unitTests {
includeAndroidResources = true
}
}
}
Notez qu'intellij 16 EAP a un bogue autour de cette variable $ MODULE_DIR $ (il pointe vers le mauvais endroit), provoquant l'échec des tests avec cette exception. Voir https://youtrack.jetbrains.com/issue/IDEA-149802#tab=History . Devrait être corrigé mi-janvier 2016.
Vous pouvez renvoyer le même problème ici: https://github.com/robolectric/robolectric/issues/1648
Vous devez le mentionner dans votre code de test:
@Config(manifest = "src/main/AndroidManifest.xml", emulateSdk = 18)
Cela indique au robolectric où se trouve votre fichier manifeste. Cela devrait fonctionner sauf si vous modifiez les valeurs de votre répertoire.
essayez également d'utiliser le modèle disponible sur Internet. Tout y est configuré. Vous n'avez pas besoin de modifier les valeurs de votre répertoire. Vous pouvez l'obtenir à partir d'ici: https://github.com/robolectric/deckard-gradle
Edit: La façon dont je vois est l'exception se produit à "build/intermediates/bundles/debug/AndroidManifest.xml "
mais vous dites que le fichier est à "app/build/intermediates/manifests/full/debug/AndroidManifest.xml"
, Je suppose que ces deux endroits sont différents. Veuillez vous assurer que vous disposez du fichier xml à build/intermediates/bundles/debug/AndroidManifest.xml "
J'ai eu cette erreur après avoir mis à jour AndroidStudio vers 2.3.3 et mon plugin Gradle a également été mis à jour. Il a été résolu en définissant working directory
à $MODULE_DIR$
et également la mise à jour de la dépendance robolectric
à partir de testCompile 'org.robolectric:robolectric:3.0'
à testCompile 'org.robolectric:robolectric:3.4.2'
.
Notez que le paramètre working directory
tandis que robolectric
la version est ancienne ne le résoudra pas.
Hi All Iam new to RoboElectric was facing lot of struggle to run my first test
please find the below steps which resolves all the issues.
Step 1: use the version in dependencies
testImplementation"org.robolectric:robolectric:4.0" in app.gradle
step 2:
in app.gradle inside Android use below
testOptions {
unitTests {
includeAndroidResources = true
}
}
étape 3: dans gradle.properties, collez ce qui suit
enableUnitTestBinaryResources = true
Ça marche !!!
C'est correct @Christine. Je suis également confronté au problème exact. Et la chose est que le processus de construction ne crée pas du tout de dossier de bundles sous intermédiaires. Et le coureur robolectric personnalisé ne fonctionnait pas non plus. Voici le custom runner que j'ai utilisé. Je n'ai pas encore trouvé la solution, mais il semble que le problème soit lié à la version de l'outil de construction qui doit être utilisée.
[Mise à jour] La modification du répertoire de travail dans ma configuration d'exécution de test unitaire pour pointer vers le répertoire racine du module qui est testé a fonctionné pour moi.