Заявления Весеннего Утверждения

Заявления о весеннем утверждении

1. обзор

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

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

Класс SpringAssert помогает нам проверять аргументы. By using methods of the Assert class, we can write assumptions which we expect to be true. И если они не выполняются, генерируется исключение времени выполнения.

Каждый методAssert можно сравнить с оператором Javaassert. Оператор Javaassert выдаетError во время выполнения, если его условие не выполняется. Интересен тот факт, что эти утверждения можно отключить.

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

  • МетодыAssert статичны

  • Они бросают либоIllegalArgumentException, либоIllegalStateException

  • Первый параметр обычно является аргументом для проверки или логическим условием для проверки.

  • Последний параметр обычно является сообщением об исключении, которое отображается в случае сбоя проверки

  • Сообщение может быть передано как параметрString или как параметрSupplier<String> .

Также обратите внимание, что, несмотря на похожее название, утверждения 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. штат()

Методstate() имеет ту же сигнатуру, что иisTrue(), но выдаетIllegalStateException.

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

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

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

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

5. Object and Type Assertions

5.1. ненулевой()

Мы можем предположить, что объект не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);
    // ...
}

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

5.4. isAssignable()с

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

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

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

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

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

6.1. hasLength()с

Мы можем проверить, не является лиString пустым, что означает наличие хотя бы одного пробела, с помощью методаhasLength():

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

6.2. hasText()с

Мы можем усилить условие и проверить, содержит лиString хотя бы один непробельный символ, используя метод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. doesNotContain()с

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

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

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

7.1. notEmpty() для коллекций

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

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

7.2. notEmpty() для карт

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

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

8. Array Assertions

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

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

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

8.2. noNullElements()с

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

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

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

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

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

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