Нотатка з оглядом базових можливостей модуля assertj-core:

Бібліотека AssertJ Java

AssertJ окрім великого вбудованого набору assertions також надає можливість створювати власні твердження, що дозволяє тестам краще відображати вашу доменну модель.

Для прикладу в якості тестованого класу буде використовуватись клас Person (getters та setters скорочено):

package wiki.it.notes.assertJ.customAssert;

public class Person {

    private String firstName;
    private String lastName;

    public Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}

Клас з custom assertions для Person

package wiki.it.notes.assertJ.customAssert;

import org.assertj.core.api.AbstractAssert;

import java.util.Objects;

public class PersonAssert extends AbstractAssert<PersonAssert, Person> {

    protected PersonAssert(Person actual) {
        super(actual, PersonAssert.class);
    }

    public static PersonAssert assertThat(Person actual) {
        return new PersonAssert(actual);
    }

    public PersonAssert hasFullName(Person expctedPerson) {
        isNotNull();

        var actualFullName = actual.getFirstName() + " " + actual.getLastName();
        var expectedFullName = expctedPerson.getFirstName() + " " + expctedPerson.getLastName();
        if(!Objects.equals(actualFullName, expectedFullName)) {
            failWithMessage("\nExpected person full name to be <%s> but was <%s>", expectedFullName, actualFullName);
        }

        return this;
    }
}

  • для створення класу з кастомними твердженнями нам потрібно наслідуватись від AbstractAssert, та вказати два generic параметри (перший – поточний клас, другий – клас який ми збираємось тестувати)
  • конструктор класу приймає на вхід об’єкт, стосовно якого будуть робитися твердження
  • статичний метод assertThat слугує точкою входу в клас PersonAssert, він буде використовуватись для запуску ланцюжка тверджень
  • нарешті hasFullName є кастомним твердженням, в якості параметру приймає посилання на об’єкт з очікуваним результатом. Всередині нього метод isNotNull перевіряє, чи не являється актуальний об’єкт Person null

Використання custom assert

Попередньо зробимо статичний імпорт PersonAssert.assertThat:

import static wiki.it.notes.assertJ.customAssert.PersonAssert.assertThat;

Тепер протестуємо об’єкт Person:

var actualPerson = new Person("Alexandros", "Riggs");
var expectedPerson = new Person("Alexandros", "Conley");

assertThat(actualPerson).hasFullName(expectedPerson);

Результат виконання (я навмисно зробив помилку, щоб побачити роботу твердження):

Exception in thread "main" java.lang.AssertionError: 
Expected person full name to be <Alexandros Conley> but was <Alexandros Riggs>