«1. Введение
Эта кулинарная книга иллюстрирует, как использовать сопоставители Hamcrest для работы с коллекциями и их тестирования.
Формат поваренной книги ориентирован на примеры и практичен – никаких посторонних деталей и объяснений не требуется.
Во-первых, давайте сделаем быстрый статический импорт, чтобы охватить большинство служебных API, которые мы собираемся использовать дальше:
import static org.hamcrest.Matchers.*;
2. Поваренная книга
проверьте, есть ли один элемент в коллекции
List<String> collection = Lists.newArrayList("ab", "cd", "ef");
assertThat(collection, hasItem("cd"));
assertThat(collection, not(hasItem("zz")));
проверить наличие нескольких элементов в коллекции
List<String> collection = Lists.newArrayList("ab", "cd", "ef");
assertThat(collection, hasItems("cd", "ef"));
проверить все элементы в коллекции
— в строгом порядке
List<String> collection = Lists.newArrayList("ab", "cd", "ef");
assertThat(collection, contains("ab", "cd", "ef"));
— в любом порядке
List<String> collection = Lists.newArrayList("ab", "cd", "ef");
assertThat(collection, containsInAnyOrder("cd", "ab", "ef"));
проверить, пуста ли коллекция
List<String> collection = Lists.newArrayList();
assertThat(collection, empty());
проверить, пуст ли массив
String[] array = new String[] { "ab" };
assertThat(array, not(emptyArray()));
проверить, пуста ли карта
Map<String, String> collection = Maps.newHashMap();
assertThat(collection, equalTo(Collections.EMPTY_MAP));
проверить, пуст ли Iterable
Iterable<String> collection = Lists.newArrayList();
assertThat(collection, emptyIterable());
проверить размер коллекции ~ ~~
List<String> collection = Lists.newArrayList("ab", "cd", "ef");
assertThat(collection, hasSize(3));
проверка размера итерируемого объекта
Iterable<String> collection = Lists.newArrayList("ab", "cd", "ef");
assertThat(collection, Matchers.<String> iterableWithSize(3));
проверка условия для каждого элемента
List<Integer> collection = Lists.newArrayList(15, 20, 25, 30);
assertThat(collection, everyItem(greaterThan(10)));
3. Заключение
Этот формат является экспериментом — я публикую часть своей внутренней разработки кулинарные книги по заданной теме — Google Guava, а теперь и Hamcrest. Цель состоит в том, чтобы эта информация была легко доступна в Интернете и добавлялась к ней каждый раз, когда я сталкивался с новым полезным примером.
Реализацию всех этих примеров и фрагментов кода можно найти на GitHub — это проект на основе Maven, поэтому его легко импортировать и запускать как есть.