How do I use Hamcrest with JUnit 5 when JUnit 5 doesn't have an assertThat() function?
JavaJunit5HamcrestAssertthatJava 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.