Has anyone integrated Hamcrest with TestNG so that its matchers can easily be used in TestNG assertions?
3 Answers
In short, to answer your question: You don't need to integrate TestNG with Hamcrest. Just call org.hamcrest.MatcherAssert.assertThat(...) directly which throws java.lang.AssertionError.
Background
I found your question via Google, wondering exactly the same issue. After further Googling, I didn't find any satisfying answers, so I read the source code for JUnit's integration with Hamcrest.
With JUnit, Hamcrest integration is normally used by calling:
org.junit.Assert.assertThat(
T actual,
org.hamcrest.Matcher<? super T> matcher)
When I read the source code, I discovered it just a small wrapper to call:
org.hamcrest.MatcherAssert.assertThat(
String reason,
T actual,
org.hamcest.Matcher<? super T> matcher)
This function throws java.lang.AssertionError.
- 19,075
- 22
- 119
- 144
-
4This is great except that _TestNG_ has [soft assertions](http://static.javadoc.io/org.testng/testng/6.8.21/org/testng/asserts/SoftAssert.html) which can't be used from _Hamcrest_. – Bass Mar 01 '18 at 11:14
-
2@Bass There's a workaround for [soft assertions](https://stackoverflow.com/questions/52151089/tetsng-softassert-with-hamcrest-matcher) – user7294900 May 15 '19 at 11:25
If you are facing problem with empty method then I would suggest to add hamcrest first in dependency list. or import first hamcrest, it will solve the problem.
I was using TestNJ with rexsl(internally using Hamcrest) and it fails to find empty method. then I added rexsl first in dependency list, if you are adding library in class path you can try to add first the Hamcrest one.
hope it will help someone like me.
- 30,115
- 28
- 106
- 129
- 167
- 1
- 2
- 5
What worked for me: 1. http://search.maven.org/
Search for 'java-hamcrest' the latest as for now is '2.0.0.0'
find dependency for Gradle (in my case)
Added compile 'org.hamcrest:java-hamcrest:2.0.0.0' to build.gradle in my project.
- 21
- 2