java – How do I use Hamcrest with JUnit 5 when JUnit 5 doesnt have an assertThat() function?

java – How do I use Hamcrest with JUnit 5 when JUnit 5 doesnt have an assertThat() function?

You have to make sure Hamcrest is included in the classpath and then use the assertThat() function provided by Hamcrest. From the current JUnit 5 User Guide – Writing Tests Assertions,

JUnit Jupiter’s org.junit.jupiter.Assertions class does not provide an
assertThat() method like the one found in JUnit 4’s org.junit.Assert
class which accepts a Hamcrest Matcher. Instead, developers are
encouraged to use the built-in support for matchers provided by
third-party assertion libraries.

The following example demonstrates how to use the assertThat() support
from Hamcrest in a JUnit Jupiter test. As long as the Hamcrest library
has been added to the classpath, you can statically import methods
such as assertThat(), is(), and equalTo() and then use them in tests
like in the assertWithHamcrestMatcher() method below.

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

}

Naturally, legacy tests based on the JUnit 4 programming model can
continue using org.junit.Assert#assertThat.

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

you can use both, Hamcrest and AssertJ, in JUnit5. Both frameworks have a simple
assertThat method, that you can import and use if wanted.

Currently, we do not plan to support these frameworks within our own Assertions to avoid
the dependencies. Still, one can use them very well.

java – How do I use Hamcrest with JUnit 5 when JUnit 5 doesnt have an assertThat() function?

Leave a Reply

Your email address will not be published.