Рубрики
Без рубрики

Заявления Spring Assert

Краткое руководство по использованию операторов Spring Assert.

Автор оригинала: baeldung.

1. Обзор

В этом уроке мы сосредоточимся и опишем назначение класса Spring Assert и продемонстрируем, как его использовать.

2. Назначение класса Assert

Класс Spring Assert помогает нам проверять аргументы. Используя методы класса Assert , мы можем написать предположения, которые, как мы ожидаем, будут истинными. И если они не выполняются, возникает исключение во время выполнения.

Каждый метод Assert можно сравнить с инструкцией Java assert . Оператор Java assert выдает Ошибку во время выполнения, если его условие не выполняется. Интересный факт заключается в том, что эти утверждения могут быть отключены.

Вот некоторые характеристики методов Spring Assert :

  • Методы Assert являются статическими
  • Они бросают либо IllegalArgumentException или IllegalStateException
  • Первый параметр обычно является аргументом для проверки или логическим условием для проверки
  • Последний параметр обычно представляет собой сообщение об исключении, которое отображается в случае сбоя проверки
  • Сообщение может быть передано либо как параметр String , либо как параметр Supplier

Также обратите внимание, что, несмотря на схожее название, утверждения Spring не имеют ничего общего с утверждениями JUnit и других фреймворков тестирования. Утверждения Spring предназначены не для тестирования, а для отладки.

3. Пример использования

Давайте определим класс Car с помощью общедоступного метода drive() :

public class Car {
    private String state = "stop";

    public void drive(int speed) {
        Assert.isTrue(speed > 0, "speed must be positive");
        this.state = "drive";
        // ...
    }
}

Мы видим, что скорость должна быть положительным числом. Приведенная выше строка-это короткий способ проверить условие и создать исключение, если условие не выполняется:

if (!(speed > 0)) {
    throw new IllegalArgumentException("speed must be positive");
}

Каждый открытый метод Assert содержит примерно такой код – условный блок с исключением во время выполнения, из которого приложение не должно восстанавливаться.

Если мы попытаемся вызвать метод drive() с отрицательным аргументом, будет выдано исключение IllegalArgumentException :

Exception in thread "main" java.lang.IllegalArgumentException: speed must be positive

4. Логические Утверждения

4.1. исТруэ()

Это утверждение обсуждалось выше. Он принимает условие boolean и выдает исключение IllegalArgumentException , когда условие ложно.

4.2. государство()

То государство() метод имеет ту же сигнатуру, что и исТруэ() но бросает Исключение IllegalStateException.

Как следует из названия, его следует использовать, когда метод не должен быть продолжен из-за незаконного состояния объекта.

Представьте, что мы не можем вызвать метод fuel () , если автомобиль работает. В этом случае давайте использовать утверждение state() :

public void fuel() {
    Assert.state(this.state.equals("stop"), "car must be stopped");
    // ...
}

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

5. Утверждения объектов и типов

5.1. NotNull()

Мы можем предположить, что объект не является null с помощью метода NotNull() :

public void сhangeOil(String oil) {
    Assert.notNull(oil, "oil mustn't be null");
    // ...
}

5.2. isNull()

С другой стороны, мы можем проверить, является ли объект null , используя метод isNull() :

public void replaceBattery(CarBattery carBattery) {
    Assert.isNull(
      carBattery.getCharge(), 
      "to replace battery the charge must be null");
    // ...
}

5.3. isInstanceOf()

Чтобы проверить, является ли объект экземпляром другого объекта определенного типа, мы можем использовать метод isInstanceOf() :

public void сhangeEngine(Engine engine) {
    Assert.isInstanceOf(ToyotaEngine.class, engine);
    // ...
}

В нашем примере проверка проходит успешно, так как Toyota Engine является подклассом Engine.

5.4. isAssignable()

Для проверки типов мы можем использовать Assert.isAssignable() :

public void repairEngine(Engine engine) {
    Assert.isAssignable(Engine.class, ToyotaEngine.class);
    // ...
}

Два недавних утверждения представляют собой отношения is-a .

6. Текстовые Утверждения

Текстовые утверждения используются для проверки аргументов String .

6.1. Длина()

Мы можем проверить, не является ли строка пустой, то есть содержит по крайней мере один пробел, с помощью метода hasLength() :

public void startWithHasLength(String key) {
    Assert.hasLength(key, "key must not be null and must not the empty");
    // ...
}

6.2. hasText()

Мы можем усилить условие и проверить, содержит ли строка по крайней мере один символ, не являющийся пробелом, с помощью метода hasText () :

public void startWithHasText(String key) {
    Assert.hasText(
      key, 
      "key must not be null and must contain at least one non-whitespace  character");
    // ...
}

6.3. Не содержит()

Мы можем определить, не содержит ли аргумент String определенной подстроки, используя метод doesNotContain() :

public void startWithNotContain(String key) {
    Assert.doesNotContain(key, "123", "key mustn't contain 123");
    // ...
}

7. Сбор и сопоставление утверждений

7.1. непустой() для коллекций

Как следует из названия, метод NotEmpty() утверждает, что коллекция не является пустой, что означает, что она не является null и содержит по крайней мере один элемент:

public void repair(Collection repairParts) {
    Assert.notEmpty(
      repairParts, 
      "collection of repairParts mustn't be empty");
    // ...
}

7.2. непустой() для карт

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

public void repair(Map repairParts) {
    Assert.notEmpty(
      repairParts, 
      "map of repairParts mustn't be empty");
    // ...
}

8. Утверждения массива

8.1. NotEmpty() для массивов

Наконец, мы можем проверить, не пуст ли массив и содержит ли он хотя бы один элемент, используя метод NotEmpty() :

public void repair(String[] repairParts) {
    Assert.notEmpty(
      repairParts, 
      "array of repairParts mustn't be empty");
    // ...
}

8.2. Неэлементы()

Мы можем проверить, что массив не содержит null элементов, используя метод noNullElements() :

public void repairWithNoNull(String[] repairParts) {
    Assert.noNullElements(
      repairParts, 
      "array of repairParts mustn't contain null elements");
    // ...
}

Обратите внимание, что эта проверка по-прежнему проходит, если массив пуст, если в нем нет элементов null .

9. Заключение

В этой статье мы исследовали класс Assert . Этот класс широко используется в рамках Spring framework, но мы могли бы легко написать более надежный и выразительный код, используя его преимущества.

Как всегда, полный код этой статьи можно найти в проекте GitHub .