ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку
logo

Проверка типа объекта в JUnit: элегантное решение

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вы хотите подтвердить, что объект является экземпляром конкретного класса, можно воспользоваться таким кодом:

Java
Скопировать код
assert obj instanceof MyClass : "У объекта obj кризис самоидентификации: это не MyClass";

В качестве альтернативы можно выполнить динамическую проверку obj:

Java
Скопировать код
assert MyClass.class.isInstance(obj) : "AssertionError: Меня не зовут MyClass, друг!";

Оба этих метода генерируют исключение AssertionError, если объект obj не подходит под объявленный класс.

Повышение эффективности с помощью методов assertThat и Matchers

Наборы утверждений JUnit могут быть усилены применением Matchers и assertThat. Эти методы помогут вам элегантно и стильно проверить принадлежность объектов ко конкретным типам.

Java
Скопировать код
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertThat;

// ...

@Test
public void fireUpInstanceOfTest() {
    assertThat(myObject, instanceOf(MyClass.class));
}

Такой подход позволяет заменить несколько методов assertTrue или assertEquals всего одной строкой кода, что добавляет к вашим тестам ещё больше элегантности и эффективности.

JUnit 5: изящество метода assertInstanceOf()

Метод assertInstanceOf() в JUnit 5 – эта изящность в сочетании с простотой. Он не только проверяет принадлежность объекта к классу, но и возвращает это значение, избавляя от необходимости явного приведения типов.

Java
Скопировать код
import static org.junit.jupiter.api.Assertions.assertInstanceOf;

// ...

@Test
void blazeInstanceOfTest() {
    assertInstanceOf(MyClass.class, myObject);
}

Когда AssertJ становится главным виртуозом

AssertJ предлагает нам создавать цепочки вызовов, transforming утверждения в нечто напоминающее грациозный танец.

Java
Скопировать код
import static org.assertj.core.api.Assertions.assertThat;

// ...

@Test
void sparkAssertJTypeCheck() {
    assertThat(myObject).isInstanceOf(MyClass.class);
}

Когда необходимо учесть все тонкости, AssertJ выполнит свою работу на отлично.

Kotlin: лаконичное утверждение

В Kotlin принадлежность объекта к классу выражается очень лаконично. Нет необходимости в приведении типов, как в Java, достаточно просто писать is.

kotlin
Скопировать код
import kotlin.test.assertTrue

// ...

@Test
fun kotlinRoastsJava() {
    assertTrue(myObject is MyClass, "Это не объект класса MyClass")
}

Чтобы Kotlin мог взаимодействовать с JUnit, добавьте в ваш проект файл AssertionsJVM.kt.

Избегайте устаревших методов

Так же, как испорченное молоко, практики программирования могут стать устаревшими. Оставайтесь в курсе новейших технологий и отказывайтесь от устаревших методов, чтобы ваш код всегда оставался актуальным.

Визуализация

Представьте, что у вас есть ящик с игрушками, среди которых имеется конструктор Lego:

Markdown
Скопировать код
Ящик с игрушками: [🧸, 🚗, 🎲, 🧩, **🧱**]

Вы можете использовать утверждение assert, чтобы проверить, что ваш 🧱 действительно является блоком Lego:

Java
Скопировать код
assertTrue(toy instanceof LegoBlock);

Таким образом, проверка типа будет представлена в виде:

Markdown
Скопировать код
Если 🧱 (игрушка) идеально сочетается с платформой Lego (🧱🟩):
    ✅ Да, это Lego! (тип подтверждён)
В противном случае:
    ❌ Нет, это не то, что нам нужно! (тип не подходит)

Определение истинного типа

Когда необходимо проверить конкретный тип объекта, а не его происхождение, можно использовать:

Java
Скопировать код
assertEquals(MyClass.class, myObject.getClass());

Этот метод убеждает нас, что myObject идентичен MyClass, исключая лишние сравнения с родственными типами.

Полезные материалы

  1. Программирование с использованием утверждений — официальное руководство по использованию assert в Java.
  2. Руководство пользователя JUnit 5 — подробная инструкция по написанию эффективных тестов с использованием JUnit 5.
  3. Утверждения в Java – GeeksforGeeks — практические примеры использования ключевого слова assert.
  4. Глава 15. Выражения — детальное руководство по использованию оператора instanceof.
  5. Приведение типов в Java — понятное руководство по приведению типов в Java, которое пригодится при проверке типов.
  6. Wildcard'ы (Учебник Java™ > Изучение языка Java > Generics (Updated)) — всё о применении wildcard'ов в дженериках для повышения гибкости работы с подтипами.
  7. IBM Developer — IBM поможет разобраться в особенностях утверждений в Java.