Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Hamcrest - what version to use? 1.3 or 2

I am quite confused. Currently I am testing my spring application using

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-test</artifactId>    <scope>test</scope> </dependency> 

I was happy as long as I wanted to match RegularExpressions. In hamcrest 1.3 you need to write your own matcher, which I did not like that much. I searched and found that hamcrest 2.0 has something build in, like:

assertThat(DateHelper.getActualDateForXML(), MatchesPattern.matchesPattern("\\d{4}+-\\d{2}-+\\d{2}+T\\d{2}+:\\d{2}+:\\d{2}+")); 

I was happy, I added:

<dependency>     <groupId>org.hamcrest</groupId>     <artifactId>hamcrest-junit</artifactId>     <version>2.0.0.0</version>     <scope>test</scope> </dependency> 

And kicked out the 1.3 hamcrest dependencies from spring-boot-starter-test:

<exclusions>     <exclusion>        <groupId>org.hamcrest</groupId>        <artifactId>hamcrest-library</artifactId>     </exclusion>     <exclusion>        <groupId>org.hamcrest</groupId>        <artifactId>hamcrest-core</artifactId>     </exclusion> </exclusions> 

Now everything is still working as I expect it to work, but I do not feel really comfortable. Because I can just find people writing about 1.3 and can not really find the use of hamcrest-junit 2.0.

Can somebody explain me the connection between them? Because it seems that hamcrest-junit 2.0 has everything build in from hamcrest 1.3...

Thanks Ben

like image 998
ben Avatar asked Nov 18 '15 09:11

ben


People also ask

What is hamcrest core 1.3 jar?

hamcrest-core. jar : This was the core API to be used by third-party framework providers. This includes a foundation set of matcher implementations for common operations. This library was used as a dependency for many third-party libraries, including JUnit 4.

What is the use of hamcrest dependency?

Hamcrest is a widely used framework for unit testing in the Java world. Hamcrest target is to make your tests easier to write and read. For this, it provides additional matcher classes which can be used in test for example written with JUnit. You can also define custom matcher implementations.

What is the use of hamcrest jar?

Hamcrest is a framework that assists writing software tests in the Java programming language. It supports creating customized assertion matchers ('Hamcrest' is an anagram of 'matchers'), allowing match rules to be defined declaratively. These matchers have uses in unit testing frameworks such as JUnit and jMock.

Is hamcrest part of JUnit?

Hamcrest is the well-known framework used for unit testing in the Java ecosystem. It's bundled in JUnit and simply put, it uses existing predicates – called matcher classes – for making assertions.


1 Answers

EDIT: After several years the answer is to use the latest Hamcrest 2 version (2.2 from 17th October 2019). For additional details also refer to @dschulten's answer.

Following is my original answer which I leave as context to understand the problem and confusion around Hamcrest versions 1.3 and 2.0.0.0 back in the day.


Based on Hamcrest Github

  • Hamcrest Github CHANGES.md
  • Decouple the evolution of Hamcrest and JUnit
  • Is this still being maintained?

and JUnit Lambda (Junit 5)

  • Minimize dependencies (especially third-party)

My take on it

  • hamcrest-junit 2.0 (should be) is a fresh start with also the goal to decouple hamcrest from junit
  • in the meantime Junit 5 project kicked off which reduces/removes third party dependencies

=> In this situation, I expect it is prudent for the hamcrest guys to wait for / coordinate with the JUnit 5 project before moving forward substantially.

As @heenenee mentioned, the hamcrest guys became busy with other stuff and so not much is happening with the project at this point.

To answer

Can somebody explain me the connection between them? Because it seems that hamcrest-junit 2.0 has everything build in from hamcrest 1.3

  • hamcrest-junit 2.0 started but the guys behind it got busy soon after (and still are) with other projects, so the development stopped
  • there might also be some uncertainties regarding JUnit 5 which may be an incentive to defer further hamcrest-junit 2.0 development until the JUnit 5 release (speculation)

... but I do not feel really comfortable. Because I can just find people writing about 1.3 and can not really find the use of hamcrest-junit 2.0.

At the moment, other than for your case there is not much incentive to move to hamcrest-junit 2.0. Once Junit 5 releases I expect that there will be more incentive to move forward again.

like image 194
Ivo Mori Avatar answered Sep 28 '22 10:09

Ivo Mori