Fluent assertion library providing rich assertions for Java tests with expressive failure messages
—
Comprehensive assertions for arrays, lists, maps, iterables, and other collection types with size, content, ordering, and membership verification.
import static org.assertj.core.api.Assertions.*;Assertions for object and primitive arrays.
// Object arrays
ObjectArrayAssert<T> assertThat(T[] actual)
// Primitive arrays
BooleanArrayAssert assertThat(boolean[] actual)
ByteArrayAssert assertThat(byte[] actual)
CharArrayAssert assertThat(char[] actual)
DoubleArrayAssert assertThat(double[] actual)
FloatArrayAssert assertThat(float[] actual)
IntArrayAssert assertThat(int[] actual)
LongArrayAssert assertThat(long[] actual)
ShortArrayAssert assertThat(short[] actual)
// Array methods
ObjectArrayAssert<T> hasSize(int expected)
ObjectArrayAssert<T> isEmpty()
ObjectArrayAssert<T> isNotEmpty()
ObjectArrayAssert<T> contains(T... values)
ObjectArrayAssert<T> containsOnly(T... values)
ObjectArrayAssert<T> containsExactly(T... values)
ObjectArrayAssert<T> containsExactlyInAnyOrder(T... values)
ObjectArrayAssert<T> containsSequence(T... sequence)
ObjectArrayAssert<T> containsSubsequence(T... subsequence)
ObjectArrayAssert<T> doesNotContain(T... values)
ObjectArrayAssert<T> startsWith(T... sequence)
ObjectArrayAssert<T> endsWith(T... sequence)
ObjectArrayAssert<T> isSorted()
ObjectArrayAssert<T> isSortedAccordingTo(Comparator<? super T> comparator)Usage examples:
String[] names = {"Alice", "Bob", "Charlie"};
assertThat(names)
.hasSize(3)
.contains("Bob")
.containsExactly("Alice", "Bob", "Charlie")
.startsWith("Alice")
.endsWith("Charlie");
int[] numbers = {1, 2, 3, 4, 5};
assertThat(numbers)
.hasSize(5)
.contains(3)
.isSorted()
.containsSequence(2, 3, 4);Specialized assertions for List collections.
ListAssert<T> assertThat(List<T> actual)
// List-specific methods (in addition to Iterable methods)
ListAssert<T> isSorted()
ListAssert<T> isSortedAccordingTo(Comparator<? super T> comparator)
ObjectAssert<T> element(int index)
ListAssert<T> hasOnlyOneElementSatisfying(Consumer<T> elementAssertions)Usage examples:
List<String> fruits = Arrays.asList("apple", "banana", "cherry");
assertThat(fruits)
.hasSize(3)
.containsExactly("apple", "banana", "cherry")
.element(1).isEqualTo("banana");
List<Integer> sortedNumbers = Arrays.asList(1, 2, 3, 4, 5);
assertThat(sortedNumbers).isSorted();Generic assertions for any Iterable collection.
IterableAssert<T> assertThat(Iterable<T> actual)
// Iterable methods
IterableAssert<T> hasSize(int expected)
IterableAssert<T> hasSizeGreaterThan(int expected)
IterableAssert<T> hasSizeLessThan(int expected)
IterableAssert<T> hasSizeBetween(int lowerBoundary, int higherBoundary)
IterableAssert<T> isEmpty()
IterableAssert<T> isNotEmpty()
IterableAssert<T> contains(T... values)
IterableAssert<T> containsOnly(T... values)
IterableAssert<T> containsOnlyOnce(T... values)
IterableAssert<T> containsExactly(T... values)
IterableAssert<T> containsExactlyInAnyOrder(T... values)
IterableAssert<T> containsSequence(T... sequence)
IterableAssert<T> containsSubsequence(T... subsequence)
IterableAssert<T> doesNotContain(T... values)
IterableAssert<T> doesNotContainAnyElementsOf(Iterable<T> iterable)
IterableAssert<T> containsAll(Iterable<T> iterable)
IterableAssert<T> allMatch(Predicate<? super T> predicate)
IterableAssert<T> anyMatch(Predicate<? super T> predicate)
IterableAssert<T> noneMatch(Predicate<? super T> predicate)
IterableAssert<T> hasOnlyOneElementSatisfying(Consumer<T> elementAssertions)Usage examples:
Set<String> colors = Set.of("red", "green", "blue");
assertThat(colors)
.hasSize(3)
.contains("red", "blue")
.doesNotContain("yellow")
.allMatch(color -> color.length() >= 3);
Collection<User> users = getActiveUsers();
assertThat(users)
.isNotEmpty()
.allMatch(User::isActive)
.anyMatch(user -> user.getRole() == Role.ADMIN);Comprehensive assertions for Map collections.
MapAssert<K, V> assertThat(Map<K, V> actual)
// Map methods
MapAssert<K, V> hasSize(int expected)
MapAssert<K, V> isEmpty()
MapAssert<K, V> isNotEmpty()
MapAssert<K, V> containsKey(K key)
MapAssert<K, V> containsKeys(K... keys)
MapAssert<K, V> doesNotContainKey(K key)
MapAssert<K, V> doesNotContainKeys(K... keys)
MapAssert<K, V> containsValue(V value)
MapAssert<K, V> containsValues(V... values)
MapAssert<K, V> doesNotContainValue(V value)
MapAssert<K, V> containsEntry(K key, V value)
MapAssert<K, V> containsEntry(MapEntry entry)
MapAssert<K, V> containsExactlyEntriesOf(Map<K, V> other)
MapAssert<K, V> containsExactlyInAnyOrderEntriesOf(Map<K, V> other)
MapAssert<K, V> doesNotContainEntry(K key, V value)
MapAssert<K, V> containsOnlyKeys(K... keys)
MapAssert<K, V> containsOnlyKeys(Iterable<K> keys)
MapAssert<K, V> hasEntrySatisfying(K key, Consumer<V> valueRequirements)Usage examples:
Map<String, Integer> scores = Map.of(
"Alice", 95,
"Bob", 87,
"Charlie", 92
);
assertThat(scores)
.hasSize(3)
.containsKeys("Alice", "Bob", "Charlie")
.containsEntry("Alice", 95)
.containsValue(87)
.doesNotContainKey("David");
assertThat(scores)
.hasEntrySatisfying("Alice", score -> assertThat(score).isGreaterThan(90));Assertions for two-dimensional arrays.
// 2D Object arrays
Object2DArrayAssert<T> assertThat(T[][] actual)
// 2D Primitive arrays
Boolean2DArrayAssert assertThat(boolean[][] actual)
Byte2DArrayAssert assertThat(byte[][] actual)
Char2DArrayAssert assertThat(char[][] actual)
Double2DArrayAssert assertThat(double[][] actual)
Float2DArrayAssert assertThat(float[][] actual)
Int2DArrayAssert assertThat(int[][] actual)
Long2DArrayAssert assertThat(long[][] actual)
Short2DArrayAssert assertThat(short[][] actual)
// 2D Array methods
Object2DArrayAssert<T> hasSize(int expected)
Object2DArrayAssert<T> hasDimensions(int expectedFirstDimension, int expectedSecondDimension)
Object2DArrayAssert<T> isEmpty()
Object2DArrayAssert<T> isNotEmpty()
Object2DArrayAssert<T> isDeepEqualTo(T[][] expected)
Object2DArrayAssert<T> isNotDeepEqualTo(T[][] expected)Usage examples:
String[][] matrix = {
{"a", "b", "c"},
{"d", "e", "f"}
};
assertThat(matrix)
.hasSize(2)
.hasDimensions(2, 3);
int[][] numbers = {{1, 2}, {3, 4}};
assertThat(numbers).hasDimensions(2, 2);Assertions for iterators and spliterators.
IteratorAssert<T> assertThat(Iterator<T> actual)
SpliteratorAssert<T> assertThat(Spliterator<T> actual)
// Iterator methods
IteratorAssert<T> hasNext()
IteratorAssert<T> isExhausted()
IteratorAssert<T> toIterable()
// Spliterator methods
SpliteratorAssert<T> hasCharacteristics(int... characteristics)
SpliteratorAssert<T> hasOnlyCharacteristics(int... characteristics)Extract values from collections for focused assertions.
// Filtering arrays and collections
Filters<E> filter(E[] array)
Filters<E> filter(Iterable<E> iterable)
// Property extraction from objects
ObjectArrayAssert<Object> extracting(String propertyName)
ObjectArrayAssert<Tuple> extracting(String... propertyNames)
ObjectArrayAssert<Object> extracting(Function<T, Object> extractor)
ObjectArrayAssert<Tuple> extracting(Function<T, Object>... extractors)
// Flattening nested collections
ListAssert<Object> flatExtracting(String propertyName)
ListAssert<Object> flatExtracting(Function<T, ?> extractor)Usage examples:
List<Person> people = Arrays.asList(
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 35)
);
// Extract property values
assertThat(people)
.extracting(Person::getName)
.containsExactly("Alice", "Bob", "Charlie");
// Extract multiple properties
assertThat(people)
.extracting("name", "age")
.contains(tuple("Alice", 30), tuple("Bob", 25));
// Filter then assert
assertThat(people)
.filteredOn(person -> person.getAge() > 28)
.extracting(Person::getName)
.containsOnly("Alice", "Charlie");
// Using string-based filtering
assertThat(people)
.filteredOn("age", 30)
.hasSize(1)
.extracting("name")
.containsExactly("Alice");// Grouping elements
Map<K, List<T>> groupBy(Function<T, K> classifier)
// Element access with index
ObjectAssert<T> element(int index)
ObjectAssert<T> first()
ObjectAssert<T> last()
// Satisfying conditions
IterableAssert<T> allSatisfy(Consumer<T> requirements)
IterableAssert<T> anySatisfy(Consumer<T> requirements)
IterableAssert<T> noneSatisfy(Consumer<T> requirements)
IterableAssert<T> hasOnlyOneElementSatisfying(Consumer<T> requirements)Usage examples:
List<String> words = Arrays.asList("hello", "world", "test");
assertThat(words)
.first().isEqualTo("hello");
assertThat(words)
.last().isEqualTo("test");
assertThat(words)
.allSatisfy(word -> assertThat(word).isNotBlank())
.anySatisfy(word -> assertThat(word).startsWith("h"));// Index for element access
class Index {
static Index atIndex(int index)
}
// Map entry for map assertions
class MapEntry<K, V> {
static <K, V> MapEntry<K, V> entry(K key, V value)
}
// Tuple for multi-value extraction
class Tuple {
static Tuple tuple(Object... values)
Object[] toArray()
}
// Filter operators
class InFilter<E> implements FilterOperator<E> {
static <E> InFilter<E> in(E... elements)
static <E> InFilter<E> in(Iterable<E> elements)
}
class NotInFilter<E> implements FilterOperator<E> {
static <E> NotInFilter<E> notIn(E... elements)
static <E> NotInFilter<E> notIn(Iterable<E> elements)
}
// Predicates for matching
interface Predicate<T> {
boolean test(T t);
}
// Functions for extraction
interface Function<T, R> {
R apply(T t);
}
// Comparators for sorting
interface Comparator<T> {
int compare(T o1, T o2);
}
// Consumer for element validation
interface Consumer<T> {
void accept(T t);
}Install with Tessl CLI
npx tessl i tessl/maven-org-assertj--assertj-core