Hamcrest Collections Cookbook

1. Introduction

This cookbook illustrates how to make use of Hamcrest matchers to work with and test collections.

The format of the cookbook is example focused and practical – no extraneous details and explanations necessary.

First, let’s do a quick static import to cover most of the utility APIs we’re going to use next:

import static org.hamcrest.Matchers.*;

2. The Cookbook

Check if single element is in a collection

List<String> collection = Lists.newArrayList("ab", "cd", "ef");
assertThat(collection, hasItem("cd"));
assertThat(collection, not(hasItem("zz")));

Check if multiple elements are in a collection

List<String> collection = Lists.newArrayList("ab", "cd", "ef");
assertThat(collection, hasItems("cd", "ef"));

Check all elements in a collection – with strict order

List<String> collection = Lists.newArrayList("ab", "cd", "ef");
assertThat(collection, contains("ab", "cd", "ef"));

Check all elements in a collection – with any order

List<String> collection = Lists.newArrayList("ab", "cd", "ef");
assertThat(collection, containsInAnyOrder("cd", "ab", "ef"));

Check if collection is empty

List<String> collection = Lists.newArrayList();
assertThat(collection, empty());

Check if array is empty

String[] array = new String[] { "ab" };
assertThat(array, not(emptyArray()));

Check if Map is empty

Map<String, String> collection = Maps.newHashMap();
assertThat(collection, equalTo(Collections.EMPTY_MAP));

Check if Iterable is empty

Iterable<String> collection = Lists.newArrayList();
assertThat(collection, emptyIterable());

Check size of a collection

List<String> collection = Lists.newArrayList("ab", "cd", "ef");
assertThat(collection, hasSize(3));

Checking size of an iterable

Iterable<String> collection = Lists.newArrayList("ab", "cd", "ef");
assertThat(collection, Matchers.<String> iterableWithSize(3));

Check condition on every item

List<Integer> collection = Lists.newArrayList(15, 20, 25, 30);
assertThat(collection, everyItem(greaterThan(10)));

3. Conclusion

This format is an experiment – I’m publishing some of my internal development cookbooks on a given topic – Google Guava and now Hamcrest. The goal is to have this information readily available online – and to add to it whenever I run into a new useful example.

The implementation of all these examples and code snippets can be found over on GitHub – this is a Maven-based project, so it should be easy to import and run as it is.

Related posts:

Prevent Brute Force Authentication Attempts with Spring Security
Java Program to Perform Complex Number Multiplication
Java Program to Perform Encoding of a Message Using Matrix Multiplication
Java Program to Implement Fisher-Yates Algorithm for Array Shuffling
Java Program to Implement Gabow Algorithm
Java equals() and hashCode() Contracts
Java Program to Implement Sorted Circularly Singly Linked List
Create Java Applet to Simulate Any Sorting Technique
Hướng dẫn sử dụng Java String, StringBuffer và StringBuilder
Java Program to Implement Bit Array
Introduction to the Java NIO2 File API
Spring Boot - Logging
Guide to CountDownLatch in Java
Spring Boot - Unit Test Cases
Java Program to Implement Adjacency Matrix
Java Program to Check Cycle in a Graph using Graph traversal
Remove All Occurrences of a Specific Value from a List
Java toString() Method
Java Program for Topological Sorting in Graphs
Consuming RESTful Web Services
Hashtable trong java
Jackson – Decide What Fields Get Serialized/Deserialized
Java Program to Implement Pairing Heap
Refactoring Design Pattern với tính năng mới trong Java 8
Spring Boot: Customize Whitelabel Error Page
Creating a Web Application with Spring 5
Giới thiệu về Stream API trong Java 8
Java Program to Implement Euler Circuit Problem
Converting Between Byte Arrays and Hexadecimal Strings in Java
Serialize Only Fields that meet a Custom Criteria with Jackson
Mockito and JUnit 5 – Using ExtendWith
Java Program to Check whether Directed Graph is Connected using DFS