Wie verwende ich Hamcrest mit JUnit 5, wenn JUnit 5 keine assertThat()-Funktion hat?

Lesezeit: 3 Minuten

Benutzer-Avatar
max

Um Hamcrest mit JUnit 4 zu verwenden, verwenden wir eine assertThat() Funktion. JUnit 5 wird jedoch keine mehr haben assertThat() Funktion. Wie verwende ich Hamcrest ohne eine assertThat()?

Benutzer-Avatar
max

Sie müssen sicherstellen, dass Hamcrest im Klassenpfad enthalten ist, und dann die verwenden assertThat() von Hamcrest bereitgestellte Funktion. Aus dem Strom JUnit 5 User Guide – Schreiben von Tests Assertions,

Die Klasse org.junit.jupiter.Assertions von JUnit Jupiter bietet keine Methode assertThat() wie die in der Klasse org.junit.Assert von JUnit 4, die einen Hamcrest-Matcher akzeptiert. Stattdessen werden Entwickler ermutigt, die integrierte Unterstützung für Matcher zu verwenden, die von Assertionsbibliotheken von Drittanbietern bereitgestellt werden.

Das folgende Beispiel demonstriert, wie man die assertThat()-Unterstützung von Hamcrest in einem JUnit-Jupiter-Test verwendet. Solange die Hamcrest-Bibliothek zum Klassenpfad hinzugefügt wurde, können Sie Methoden wie „asserThat()“, „is()“ und „equalTo()“ statisch importieren und sie dann in Tests wie in der Methode „asserWithHamcrestMatcher()“ unten verwenden.

import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;

import org.junit.jupiter.api.Test;

class HamcrestAssertionDemo {

    @Test
    void assertWithHamcrestMatcher() {
        assertThat(2 + 1, is(equalTo(3)));
    }

}

Natürlich können ältere Tests, die auf dem JUnit 4-Programmiermodell basieren, weiterhin org.junit.Assert#assertThat verwenden.”

  • Was mich umhaut ist, assertThat sollte der neue Weg sein, um alle Behauptungen zu machen, und dann kommt plötzlich JUnit 5 heraus und hat irgendwie immer noch alle alten Assert-Methoden, aber hat auch die einzige moderne entfernt. Sie waren bereits entschlossen, die API zu knacken, also könnte man meinen, sie hätten wirklich dorthin gehen und alle redundanten Behauptungsmethoden entfernen können. Anfangs dachte ich, dass es vielleicht der Bequemlichkeit der Migration dient, aber nein, die Parameterreihenfolge ist nicht einmal dieselbe.

    – Hakanai

    14. Dezember 2017 um 5:31 Uhr

  • Das JUnit 5-Team stand vor der Wahl, entweder eine ausgewachsene „moderne“ Assertion-Bibliothek zu implementieren oder nur das Nötigste bereitzustellen und intelligente Assertionen externen Bibliotheken zu überlassen. Das Team ging mit letzterem. Was Junit4 getan hat, war, eine externe Abhängigkeit einzuziehen. auf eine bestimmte Version von Hamcrest, was später als Fehler angesehen wurde, da es zu vielen Problemen mit widersprüchlichen Versionen führte. Überhaupt keine externen Deps zu haben, war daher eine Grundregel für den JUnit 5-Kern.

    – Johanneslink

    16. März 2018 um 6:14 Uhr


  • @johanneslink OK … aber was ist assumeThat? Es ist nicht in JUnit 5 Assumptions statische Methoden und ist auch nicht in Hamcrest. Wird von uns erwartet, dass wir noch eine weitere Bibliothek heranziehen, um Annahmen zu erhalten? Insgesamt scheint es nur so, als hätte JUnit 5 das Ganze halbherzig gemacht. Es wäre besser gewesen, überhaupt keine Behauptungen aufzunehmen, als das, was sie uns gegeben haben.

    – Hakanai

    1. Dezember 2020 um 1:01 Uhr


  • Um diesem ganzen Durcheinander noch mehr Lacher hinzuzufügen, hat JUnit 4 jetzt veraltet assertThat. dh die einzige moderne Assertion-Methode ist jetzt veraltet, die Verwendung der Legacy-Methode hingegen nicht. LOL!

    – Hakanai

    1. Dezember 2020 um 1:08 Uhr


  • @Trejkaz Geschmäcker und Designurteile sind offensichtlich unterschiedlich.

    – Johanneslink

    1. Dezember 2020 um 5:31 Uhr

Sehen https://github.com/junit-team/junit5/issues/147:

Sie können sowohl Hamcrest als auch AssertJ in JUnit5 verwenden. Beide Frameworks verfügen über eine einfache Methode assertThat, die Sie bei Bedarf importieren und verwenden können.

Derzeit planen wir nicht, diese Frameworks in unseren eigenen Assertions zu unterstützen, um die Abhängigkeiten zu vermeiden. Trotzdem kann man sie sehr gut gebrauchen.

1107360cookie-checkWie verwende ich Hamcrest mit JUnit 5, wenn JUnit 5 keine assertThat()-Funktion hat?

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

Privacy policy