Erhalten von „NoSuchMethodError: org.hamcrest.Matcher.describeMismatch“, wenn der Test in IntelliJ 10.5 ausgeführt wird

Lesezeit: 7 Minuten

Erhalten von „NoSuchMethodError orghamcrestMatcherdescribeMismatch wenn der Test in IntelliJ 105
Noel Jap

Ich verwende JUnit-dep 4.10 und Hamcrest 1.3.RC2.

Ich habe einen benutzerdefinierten Matcher erstellt, der wie folgt aussieht:

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 */
    }
}

Es funktioniert einwandfrei, wenn es von der Befehlszeile aus mit Ant ausgeführt wird. Aber wenn es von IntelliJ ausgeführt wird, schlägt es fehl mit:

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)

Meine Vermutung ist, dass es das falsche hamcrest.MatcherAssert verwendet. Wie finde ich heraus, welches hamcrest.MatcherAssert es verwendet (dh welche JAR-Datei es für hamcrest.MatcherAssert verwendet)? AFAICT, die einzigen Hamcrest-Jars in meinem Klassenpfad sind 1.3.RC2.

Verwendet IntelliJ IDEA eine eigene Kopie von JUnit oder Hamcrest?

Wie gebe ich den Laufzeit-CLASSPATH aus, den IntelliJ verwendet?

1642577107 584 Erhalten von „NoSuchMethodError orghamcrestMatcherdescribeMismatch wenn der Test in IntelliJ 105
Garret Hall

Stellen Sie sicher, dass Oberschenkel jar ist im Importauftrag höher als Ihre JUnit Krug.

JUnit kommt von selbst org.hamcrest.Matcher Klasse, die wahrscheinlich stattdessen verwendet wird.

Sie können die auch herunterladen und verwenden junit-dep-4.10.jar stattdessen ist das JUnit ohne die Hamcrest-Klassen.

mockito enthält auch die Hamcrest-Klassen, daher müssen Sie es möglicherweise auch verschiebenneu anordnen

  • OP sagte, dass sie bereits das ‘-dep-‘-Glas verwenden. Aber Ihre Vermutung, dass es die Matcher-Klasse aus dem JUnit-Jar verwendet, klingt richtig. Es ist also wahrscheinlich, dass die IDE ihre eigene Kopie von JUnit verwendet.

    – Tyler

    24. Oktober 11 um 20:40 Uhr

  • Ich habe die IntelliJ-Kopie von junit.jar und junit-4.8.jar entfernt, junit-dep-4.10.jar in das lib/-Verzeichnis von IntelliJ installiert, und das Problem tritt immer noch auf.

    – Noel Yap

    24. Oktober 11 um 20:59 Uhr

  • JUnit 4.11 ist kompatibel mit Hamcrest 1.3 und JUnit 4.10 ist kompatibel mit Hamcrest 1.1 search.maven.org/remotecontent?filepath=junit/junit-dep/4.10/…

    – Muthu

    15. Mai 14 um 12:04 Uhr


  • Stellen Sie sicher, dass Sie NICHT mockito-all verwenden, sondern mockito-core mit einem Ausschluss von hamcrest

    – Ulf Lindback

    21. November 14 um 10:19 Uhr

  • “höher im Import” was meinst du?

    – Adeline

    15. Juli 16 um 16:34 Uhr

Erhalten von „NoSuchMethodError orghamcrestMatcherdescribeMismatch wenn der Test in IntelliJ 105
Tom Parkinson

Dieses Problem tritt auch auf, wenn Sie haben mockito-alles auf Ihrem Klassenpfad, der bereits veraltet ist.

Wenn möglich einfach eintragen Mockito-Kern.

Maven-Konfiguration zum Mischen von Junit, Mockito und Hamcrest:

<dependencies>
  <dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-core</artifactId>
    <version>1.3</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-library</artifactId>
    <version>1.3</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-all</artifactId>
    <version>1.9.5</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
  </dependency>
</dependencies>

  • Ganz so wie die neuen Versionen von mockito beinhalten hamcrest auch gleich Powermock!

    – Tom Parkinson

    17. Dezember 13 um 9:33 Uhr

  • Sollte das Mockito-Core statt Mockito-All sein?

    – Benutzer944849

    13. Januar 14 um 21:38 Uhr

  • Sie könnten nur den Kern hinzufügen, wenn Sie ihn nur im Tempo benötigen, aber das oben Genannte sollte in allen Fällen funktionieren. Die Reihenfolge der Abhängigkeiten ist das wichtige Bit mvn 3 beginnt von oben in der Reihenfolge der Priorität.

    – Tom Parkinson

    14. Januar 14 um 08:15 Uhr

  • Sie sollten Mockito-All NICHT einschließen, da dies Hamcrest 1.1 enthält, sondern Mockito-Core einschließen und Hancrest davon ausschließen (was Sie nicht von allen tun können).

    – Ulf Lindback

    21. November 14 um 10:12 Uhr

  • “Wenn möglich nur Mockito-Core einbeziehen.”. OK, warum verwendet diese Antwort dann immer noch mockito-all ?

    – Stealth-Rabbi

    17. Januar 20 um 15:56 Uhr

Erhalten von „NoSuchMethodError orghamcrestMatcherdescribeMismatch wenn der Test in IntelliJ 105
Noel Jap

Das Problem war, dass das falsch war hamcrest.Matcher, nicht hamcrest.MatcherAssert, Klasse wurde verwendet. Das wurde aus einer junit-4.8-Abhängigkeit eingezogen, die eine meiner Abhängigkeiten spezifizierte.

Um zu sehen, welche Abhängigkeiten (und Versionen) aus welcher Quelle beim Testen enthalten sind, führen Sie Folgendes aus:

mvn dependency:tree -Dscope=test

  • Ich hatte das gleiche Problem. Ich habe JUnit-dep und Hamcrest-core verwendet, aber Powermock war früher im Pom aufgeführt, was dazu führte, dass JUnit vor JUnit-dep und Hamcrest enthalten war.

    – Johannes B

    3. November 11 um 13:10 Uhr

  • Auch mockito-all enthält einige Hamcrest-Klassen. Es ist besser, Mockito-Core zu verwenden und die Hamcrest-Abhängigkeit auszuschließen.

    – Brambo

    24. April 2012 um 9:39 Uhr

  • Bin gerade auf das gleiche Problem gestoßen. Die Lösung bestand darin, die Junit-Version auf 4.11 zu aktualisieren, die mit Hamcrest 1.3 kompatibel ist (dh “Klassen enthält von”)

    – r3mbol

    12. September 13 um 8:59 Uhr

  • Für diejenigen, bei denen alle Vorschläge nicht so gut funktioniert haben (Abhängigkeitsreihenfolge, Ausschlüsse, Entfernen von Ersetzen -all mit -core, etc…): Ich musste hamcrest wieder auf Version 1.1 umstellen und jetzt funktioniert alles wieder.

    – Felix Hagspiel

    11. Januar 19 um 10:07 Uhr

  • Bei mir hat es funktioniert, als ich meinen Import auf geändert habe import static org.mockito.Matchers.anyString; von import static org.mockito.ArgumentMatchers.anyString;

    – Shrikant Prabhu

    17. Januar 19 um 10:18 Uhr

Das Folgende sollte heute am richtigsten sein. Beachten Sie, dass junit 4.11 von hamcrest-core abhängt, daher sollten Sie dies überhaupt nicht angeben müssen, da mockito-all nicht verwendet werden kann beinhaltet (hängt nicht von ab) Hamcrest 1.1

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>1.10.8</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

1642577108 201 Erhalten von „NoSuchMethodError orghamcrestMatcherdescribeMismatch wenn der Test in IntelliJ 105
Raúl

Dies funktionierte für mich, nachdem ich ein bisschen gekämpft hatte

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-all</artifactId>
    <version>1.3</version>
    <scope>test</scope>
 </dependency>

 <dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-all</artifactId>
    <version>1.9.5</version>
    <scope>test</scope>
 </dependency>

 <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
 </dependency>

  • Gleiche für mich. Das Anordnen von Abhängigkeiten in dieser Reihenfolge hilft Maven, transitive Deps korrekt aufzulösen. Das ausdrückliche Ausschließen von Hamcrest aus Mockito-Core oder Mockito-All könnte jedoch sicherer sein, falls jemand Deps in Ihrem Pom neu anordnet.

    – Matte

    26. Januar 17 um 14:48 Uhr

Erhalten von „NoSuchMethodError orghamcrestMatcherdescribeMismatch wenn der Test in IntelliJ 105
Kai

Ich weiß, dass dies ein alter Thread ist, aber was das Problem für mich gelöst hat, war das Hinzufügen des Folgenden zu meinen build.gradle-Dateien. Wie bereits oben erwähnt, gibt es ein Kompatibilitätsproblem mit mockito-all

Möglicherweise nützlich Post:

testCompile ('junit:junit:4.12') {
    exclude group: 'org.hamcrest'
}
testCompile ('org.mockito:mockito-core:1.10.19') {
    exclude group: 'org.hamcrest'
}
testCompile 'org.hamcrest:hamcrest-core:1.3'

  • Gleiche für mich. Das Anordnen von Abhängigkeiten in dieser Reihenfolge hilft Maven, transitive Deps korrekt aufzulösen. Das ausdrückliche Ausschließen von Hamcrest aus Mockito-Core oder Mockito-All könnte jedoch sicherer sein, falls jemand Deps in Ihrem Pom neu anordnet.

    – Matte

    26. Januar 17 um 14:48 Uhr

1642577108 246 Erhalten von „NoSuchMethodError orghamcrestMatcherdescribeMismatch wenn der Test in IntelliJ 105
mlegge

Versuchen

expect(new ThrowableMessageMatcher(new StringContains(message)))

anstatt

expectMessage(message)

Sie können eine Gewohnheit schreiben ExpectedException oder Utility-Methode, um den Code zu verpacken.

.

544680cookie-checkErhalten von „NoSuchMethodError: org.hamcrest.Matcher.describeMismatch“, wenn der Test in IntelliJ 10.5 ausgeführt wird

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy