Assertions (утверждения) — это ключевой механизм проверки ожидаемых результатов в тестах. Рассмотрим основные варианты в TestNG и JUnit с примерами.
import static org.testng.Assert.*;
@Test
public void basicAssertions() {
assertEquals(actual, expected); // Проверка равенства
assertNotEquals(actual, unexpected); // Проверка неравенства
assertTrue(condition); // Проверка истинности
assertFalse(condition); // Проверка ложности
assertNull(object); // Проверка на null
assertNotNull(object); // Проверка на not null
}
@Test
public void collectionAssertions() {
List<String> actual = Arrays.asList("a", "b", "c");
List<String> expected = Arrays.asList("a", "b", "c");
assertEqualsNoOrder(actual.toArray(), expected.toArray()); // Без учета порядка
assertEquals(actual, expected); // С учетом порядка
}
@Test(expectedExceptions = NullPointerException.class)
public void exceptionTest() {
String str = null;
str.length();
}
@Test
public void softAssertTest() {
SoftAssert softAssert = new SoftAssert();
softAssert.assertEquals(1, 2, "Первая проверка");
softAssert.assertTrue(false, "Вторая проверка");
softAssert.assertAll(); // Выводит все ошибки
}
import static org.junit.jupiter.api.Assertions.*;
@Test
void junitAssertions() {
assertEquals(expected, actual);
assertNotEquals(unexpected, actual);
assertTrue(condition);
assertFalse(condition);
assertNull(object);
assertNotNull(object);
}
@Test
void advancedJunitAssertions() {
assertAll(
() -> assertEquals(1, 1),
() -> assertTrue(true),
() -> assertNull(null)
);
assertThrows(NullPointerException.class, () -> {
String str = null;
str.length();
});
}
Тип проверки | TestNG | JUnit 5 |
---|---|---|
Базовые равенства | assertEquals() | assertEquals() |
Коллекции | assertEqualsNoOrder() | assertIterableEquals() |
Исключения | @Test(expectedExceptions) | assertThrows() |
Групповые проверки | SoftAssert | assertAll() |
Таймауты | assertTimeout() | assertTimeoutPreemptively() |
Читаемость: Добавляйте поясняющие сообщения
assertEquals(actual, expected, "Сообщение при ошибке");
Специфичные проверки: Используйте наиболее подходящий assertion
Группировка: Для нескольких проверок используйте assertAll/SoftAssert
Производительность: Размещайте "тяжелые" проверки в конце
AssertJ: Более читаемый fluent-синтаксис
assertThat(actual).isEqualTo(expected).isNotNull();
Hamcrest: Матчеры для сложных проверок
assertThat(actual, allOf(containsString("text"), hasLength(5)));
TestNG и JUnit предоставляют богатый набор assertions для различных сценариев проверок. TestNG предлагает SoftAssert для накопления ошибок, в то время как JUnit 5 имеет более современный синтаксис с assertAll(). Для сложных проверок стоит рассмотреть AssertJ или Hamcrest.