How do I use Hamcrest with JUnit 5 when JUnit 5 doesn't have an assertThat() function?

JavaJunit5HamcrestAssertthat

Java Problem Overview


To use Hamcrest with JUnit 4 we use an assertThat() function. However, JUnit 5 is no longer going to have an assertThat() function. How do I use Hamcrest without an assertThat()?

Java Solutions


Solution 1 - Java

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][1],

> 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."

[1]: http://junit.org/junit5/docs/current/user-guide/#writing-tests-assertions "JUnit 5 User Guide section Writing Tests Assertions"

Solution 2 - Java

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMaxView Question on Stackoverflow
Solution 1 - JavaMaxView Answer on Stackoverflow
Solution 2 - JavaGrigory KislinView Answer on Stackoverflow