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:

New Features in Java 10
A Guide to Iterator in Java
So sánh HashMap và Hashtable trong Java
Spring Security – security none, filters none, access permitAll
Phương thức tham chiếu trong Java 8 – Method References
Giới thiệu Google Guice – Binding
Java Perform to a 2D FFT Inplace Given a Complex 2D Array
Java Program to Implement Quick Sort with Given Complexity Constraint
Java Program to Implement CopyOnWriteArraySet API
Registration – Password Strength and Rules
Hướng dẫn Java Design Pattern – Adapter
Versioning a REST API
Java Program to Implement SimpeBindings API
Java Program to Find Whether a Path Exists Between 2 Given Nodes
How to use the Spring FactoryBean?
Guide to Java 8 groupingBy Collector
Serve Static Resources with Spring
How to Return 404 with Spring WebFlux
Java Program to Implement Queue using Linked List
Java Program to Check whether Graph is a Bipartite using 2 Color Algorithm
Registration – Activate a New Account by Email
Hướng dẫn sử dụng luồng vào ra ký tự trong Java
Java Program to Find a Good Feedback Vertex Set
Java Program to Print the Kind of Rotation the AVL Tree is Undergoing
Using Optional with Jackson
Java Program for Douglas-Peucker Algorithm Implementation
Guide to WeakHashMap in Java
Bootstrapping Hibernate 5 with Spring
Spring Web Annotations
Java Program to Describe the Representation of Graph using Incidence List
Netflix Archaius with Various Database Configurations
Giới thiệu Swagger – Công cụ document cho RESTfull APIs