J'utilise JUnit-dep 4.10 et Hamcrest 1.3.RC2.
J'ai créé un matcher personnalisé qui ressemble à ceci:
public static class MyMatcher extends TypeSafeMatcher<String> {
@Override
protected boolean matchesSafely(String s) {
/* implementation */
}
@Override
public void describeTo(Description description) {
/* implementation */
}
@Override
protected void describeMismatchSafely(String item, Description mismatchDescription) {
/* implementation */
}
}
Il fonctionne parfaitement bien lorsqu'il est exécuté à partir de la ligne de commande en utilisant Ant. Mais lorsqu'il est exécuté à partir d'IntelliJ, il échoue avec:
java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch(Ljava/lang/Object;Lorg/hamcrest/Description;)V
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:18)
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:8)
at com.netflix.build.MyTest.testmyStuff(MyTest.java:40)
Je suppose qu'il utilise le mauvais hamcrest.MatcherAssert. Comment puis-je trouver quel hamcrest.MatcherAssert il utilise (c'est-à-dire quel fichier jar il utilise pour hamcrest.MatcherAssert)? AFAICT, le seul bocal Hamcrest de mon chemin de classe est le 1.3.RC2.
IntelliJ IDEA utilise-t-il sa propre copie de JUnit ou Hamcrest?
Comment puis-je générer le CLASSPATH d'exécution utilisé par IntelliJ?
Ce problème se produit également lorsque vous avez mockito-all sur votre chemin de classe, qui est déjà obsolète.
Si possible, incluez simplement mockito-core .
Config Maven pour mélanger junit, mockito et hamcrest:
la source
Le problème était que la mauvaise classe
hamcrest.Matcher
, nonhamcrest.MatcherAssert
, était utilisée. Cela était tiré d'une dépendance junit-4.8 que l'une de mes dépendances spécifiait.Pour voir quelles dépendances (et versions) sont incluses à partir de quelle source pendant le test, exécutez:
la source
-all
par-core
, etc ...): J'ai dû changer hamcrest en version 1.1 et maintenant tout fonctionne à nouveau.import static org.mockito.Matchers.anyString;
deimport static org.mockito.ArgumentMatchers.anyString;
Ce qui suit devrait être le plus correct aujourd'hui. Remarque, junit 4.11 dépend de hamcrest-core, vous ne devriez donc pas avoir besoin de spécifier que mockito-all ne peut pas être utilisé car il inclut (ne dépend pas de) hamcrest 1.1
la source
mockito-all
m'a aidé, nonmockito-core
. Déclarant également Hamcrest devant Mockito enpom.xml
travaux.Cela a fonctionné pour moi après un peu de difficulté
la source
Essayer
expect(new ThrowableMessageMatcher(new StringContains(message)))
au lieu de
expectMessage(message)
Vous pouvez écrire une
ExpectedException
méthode personnalisée ou utilitaire pour terminer le code.la source
Je sais que c'est un vieux fil, mais ce qui a résolu le problème pour moi, c'est l'ajout de ce qui suit à mes fichiers build.gradle. Comme déjà indiqué ci-dessus, il existe un problème de compatibilité avec
mockito-all
Poste éventuellement utile :
la source
Malgré le fait qu'il s'agit d'une question très ancienne et que bon nombre des idées susmentionnées ont résolu de nombreux problèmes, je souhaite toujours partager la solution avec la communauté qui a résolu mon problème.
J'ai trouvé que le problème était une fonction appelée "hasItem" que j'utilisais pour vérifier si un tableau JSON contient ou non un élément spécifique. Dans mon cas, j'ai vérifié une valeur de type Long.
Et cela a conduit au problème.
D'une manière ou d'une autre, les Matchers ont des problèmes avec les valeurs de type Long. (Je n'utilise pas JUnit ou Rest-Assured tellement idk. Exactement pourquoi, mais je suppose que les données JSON renvoyées ne contiennent que des entiers.)
Donc, ce que j'ai fait pour résoudre le problème était le suivant. À la place d'utiliser:
il vous suffit de lancer sur Integer. Le code de travail ressemblait donc à ceci:
Ce n'est probablement pas la meilleure solution, mais je voulais juste mentionner que l'exception peut également être levée en raison de types de données incorrects / inconnus.
la source
Ce qui a fonctionné pour moi, c'était d'exclure le groupe hamcrest de la compilation des tests junit.
Voici le code de mon build.gradle:
Si vous exécutez IntelliJ, vous devrez peut-être exécuter
gradle cleanIdea idea clean build
pour détecter à nouveau les dépendances.la source
Je sais que ce n'est pas la meilleure réponse, mais si vous ne pouvez pas faire fonctionner le chemin de classe, c'est une solution de plan B.
Dans mon chemin de classe de test, j'ai ajouté l'interface suivante avec une implémentation par défaut pour la méthode describeMismatch.
la source
J'ai un projet gradle et lorsque ma section de dépendances build.gradle ressemble à ceci:
cela conduit à cette exception:
pour résoudre ce problème, j'ai remplacé "mockito-all" par "mockito-core".
L'explication entre mockito-all et mockito-core peut être trouvée ici: https://solidsoft.wordpress.com/2012/09/11/beyond-the-mockito-refcard-part-3-mockito-core-vs-mockito -tous les projets basés sur Mavengradle /
la source
Dans mon cas, j'ai dû exclure un hamcrest plus ancien de junit-vintage:
la source
Cela a fonctionné pour moi. Pas besoin d'exclure quoi que ce soit. Je l'ai juste utilisé à la
mockito-core
placemockito-all
la source