Как использовать Hamcrest с JUnit 5, когда JUnit 5 не имеет функции assertThat()?

Чтобы использовать Hamcrest с JUnit 4, мы используем функцию assertThat(). Однако JUnit 5 больше не будет иметь функцию assertThat(). Как использовать Hamcrest без assertThat()?

Ответ 1

Вы должны убедиться, что Hamcrest включен в classpath, а затем использовать функцию assertThat(), предоставляемую Hamcrest. Из текущего Руководства пользователя JUnit 5 - Написание проверочных утверждений,

JUnit Jupiters org.junit.jupiter.Assertions класс не предоставляет Метод assertThat(), подобный методу, найденному в JUnit 4s org.junit.Assert класс, который принимает Hamcrest Matcher. Вместо этого разработчики Рекомендуется использовать встроенную поддержку для сопоставителей, предоставляемых сторонние библиотеки утверждений.

В следующем примере показано, как использовать поддержку assertThat() от Hamcrest в тесте Юпитера Юпитера. Пока библиотека Хэмкрест был добавлен в classpath, вы можете статически импортировать методы такие как assertThat(), is() и equalTo(), а затем использовать их в тестах как в методе assertWithHamcrestMatcher() ниже.

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)));
    }

}

Естественно, устаревшие тесты, основанные на модели программирования JUnit 4, могут продолжить использовать org.junit.Assert # assertThat. "

Ответ 2

Смотрите https://github.com/junit-team/junit5/issues/147:

вы можете использовать оба, Hamcrest и AssertJ, в JUnit5. Обе рамки имеют простой assertThat метод, который вы можете импортировать и использовать, если хотите.

В настоящее время мы не планируем поддерживать эти структуры в наших собственных утверждениях, чтобы избежать зависимости. Тем не менее, их можно использовать очень хорошо.