Mockito + Dexmaker sur Android
Je suis en train d'utiliser Mockito dans mon projet Android.
J'ai trouvé très bon tutoriel qui traite de cela: http://www.paulbutcher.com/2012/05/mockito-on-android-step-by-step/
Fondamentalement, il utilise la nouvelle version de Mockito + Dexmaker et tout fonctionne comme prévu.
Cependant, lorsque j'essaie de se moquer de certains Android objet spécifique je.e:
Context context = mock(Context.class);
- Je recevoir cette exception:
java.lang.IllegalArgumentException:
dexcache == null (and no default could be found;
consider setting the 'dexmaker.dexcache' system property)
at com.google.dexmaker.DexMaker.generateAndLoad(DexMaker.java:359)
at com.google.dexmaker.stock.ProxyBuilder.buildProxyClass(ProxyBuilder.java:252)
at com.google.dexmaker.mockito.DexmakerMockMaker.createMock(DexmakerMockMaker.java:54)
at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:26)
Une idée de comment résoudre ce problème?
- Si vous ne construisez pas votre Apk en utilisant gradle voir ma réponse sur stackoverflow.com/questions/29290795/... pour plus d'informations
Vous devez vous connecter pour publier un commentaire.
De @rjath du commentaire de @MrChaz réponse, cela fonctionne mieux pour moi:
Je l'ai mis dans mon
setUp()
méthode.J'ai réussi à rassembler un correctif qui semble fonctionner pour moi.
Pour le manifeste, j'ai ajouté de lire et d'écrire de stockage externe.
Pour le test j'ai ajouté
System.setProperty("dexmaker.dexcache", "/sdcard");
à l'épreuve.À l'image d'émulateur, j'ai ajouté une carte SD.
Je crois que cela fonctionne parce que par défaut mockito essaie d'utiliser les applications répertoire de cache, mais je n'ai jamais courir une activité donc je soupçonne que le répertoire n'est jamais créé par le système d'exploitation
Alors le problème est avec Dexmaker ne pas être en mesure de trouver le chemin du cache sur Android >= 4.3 que les autres personnes mentionnées et décrites dans cette question dexmaker.
Je suis allé avec la mise en œuvre de la solution de contournement personnalisé dans un test instrumenté coureur au lieu de chaque test (ou de leur super-classe)
setUp()
, parce qu'il se sent un peu moins hacky (c'est vraiment dans un seul endroit - et pas héréditaire, dans chaque sous-classe) et plus souple.Pour l'amour de la documentation, ce sont les changements nécessaires pour ce faire:
Et mettre en place votre projet (ou d'un projet de test) l'utilisation de cette classe que l'instrumentation de test runner dans son
AndroidManifest.xml
lors de la construction avec ant:ou de ses
build.gradle
lors de la construction avec gradle:Si vous avez d'autres
instrumentation
entrées, vous pouvez basculer entre eux soit sur la ligne de commande ou sélectionnez-en un dans votre IDE configuration en cours d'exécution.J'ai eu ce problème pour un Androïde de la Bibliothèque de projet, mais PAS pour le projet d'application! Le réglage du Système de la propriété "dexmaker.dexcache" comme mentionné ci-dessus a travaillé autour de la question.
Je suis sous Android 4.3, le Nexus 4 de l'appareil, la construction avec 19.0.3 outils, cible api 19,
mon dépendances:
Il ressemble à la dexmaker projet a été déplacé de Google Code à GitHub.
Dans le dépôt central de maven il existe des versions 1.1 et 1.2, publié en Mars 2014 et décembre 2014.
J'ai vérifié cette "dexcache == null" problème existe encore, jusqu'à la version 1.2 - mais seulement sur certains appareils. Par exemple, un Galaxy S5 avec Android 5.0 a le problème, et un Galaxy S4 avec Android 4.4.2 n'.
J'ai cloné le dépôt GitHub (le dernier commit 12 Mars 2015 - ca74669), et a couru localement, et le problème a été résolu (il y a également un engagement dans l'histoire qu'une copie de sauvegarde). Donc, une fois il y a une version 1.3, j'espère que ce problème a disparu pour de bon!
Quelqu'un d'autre qui veulent exécuter une copie locale de 1,3-INSTANTANÉ, voici comment je l'ai fait (sur un Mac, mais d'autres plateformes devraient trop de travail, vous aurez besoin mvn, bad, et dx sur CHEMIN):
git clone
https://github.com/crittercism/dexmaker.gitcd dexmaker
mvn install -Dmaven.test.skip=true
cp -R ~/.m2/repository/com/google/dexmaker $ANDROID_HOME/extras/android/m2repository/com/google
app/build.gradle
:androidTestCompile 'com.google.dexmaker:dexmaker:1.3-SNAPSHOT'
pom.xml
si vous utilisez maven pour construire, ou remplacer votrelibs/dexmaker.jar
avec~/.m2/repository/com/google/dexmaker/dexmaker/1.3-SNAPSHOT/dexmaker-1.3-SNAPSHOT.jar
si vous utilisez eclipse/antAussi, pour info, le édition originale de rapport pour le même problème sur Google Code.
Vous pouvez ajouter la mockito de base comme une dépendance à la place. Alors, que l'erreur ne se fera pas et vous n'aurez pas besoin d'une solution de contournement.