1. Обзор
В этом руководстве мы сосредоточимся и опишем назначение класса Spring Assert
и продемонстрируем, как его использовать.
2. Назначение класса Assert
Класс Spring Assert
помогает нам проверять аргументы. Используя методы класса Assert
, мы можем писать предположения, которые, как мы ожидаем, будут истинными. И если они не выполняются, генерируется исключение времени выполнения.
Каждый метод Assert
можно сравнить с оператором assert
Java . Оператор утверждения
Java выдает ошибку
во время выполнения, если его условие не выполняется. Интересным фактом является то, что эти утверждения можно отключить.
Вот некоторые характеристики методов Spring Assert
:
Методы 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. правда()
Это утверждение обсуждалось выше. Он принимает логическое
условие и генерирует исключение IllegalArgumentException
, когда условие ложно.
4.2. государство()
Метод state()
имеет ту же сигнатуру, что и isTrue()
, но генерирует исключение IllegalStateException.
Как следует из названия, его следует использовать, когда метод нельзя продолжать из-за недопустимого состояния объекта.
Представьте, что мы не можем вызвать метод fuel()
, если машина работает. Давайте используем утверждение state()
в этом случае:
public void fuel() {
Assert.state(this.state.equals("stop"), "car must be stopped");
// ...
}
Конечно, мы можем проверить все, используя логические утверждения. Но для лучшей читабельности мы можем использовать дополнительные утверждения, которые делают наш код более выразительным.
5. Утверждения объекта и типа
5.1. ненулевой()
Мы можем предположить, что объект не является нулевым
, используя метод notNull()
:
public void сhangeOil(String oil) {
Assert.notNull(oil, "oil mustn't be null");
// ...
}
5.2. нулевой()
С другой стороны, мы можем проверить, является ли объект нулевым
, используя метод 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. назначаемый ()
Для проверки типов мы можем использовать Assert.isAssignable()
:
public void repairEngine(Engine engine) {
Assert.isAssignable(Engine.class, ToyotaEngine.class);
// ...
}
Два недавних утверждения представляют отношение " является-
отношением".
6. Текстовые утверждения
Текстовые утверждения используются для проверки строковых
аргументов.
6.1. имеетдлину()
Мы можем проверить, не является ли строка
пустой, то есть содержит хотя бы один пробел, используя метод hasLength()
:
public void startWithHasLength(String key) {
Assert.hasLength(key, "key must not be null and must not the empty");
// ...
}
6.2. имееттекст()
Мы можем усилить условие и проверить, содержит ли строка
хотя бы один непробельный символ, используя метод 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 определенную подстроку, используя метод
doNotContain()
:
public void startWithNotContain(String key) {
Assert.doesNotContain(key, "123", "key mustn't contain 123");
// ...
}
7. Сбор и утверждение карты
7.1. notEmpty()
для коллекций
Как следует из названия, метод notEmpty()
утверждает, что коллекция не пуста, что означает, что она не является нулевой
и содержит хотя бы один элемент:
public void repair(Collection<String> repairParts) {
Assert.notEmpty(
repairParts,
"collection of repairParts mustn't be empty");
// ...
}
7.2. notEmpty()
для Карт
Тот же метод перегружен для карт, и мы можем проверить, не является ли карта пустой и содержит хотя бы одну запись:
public void repair(Map<String, String> 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. нетнульэлементы()
Мы можем проверить, что массив не содержит пустых
элементов, используя метод noNullElements()
:
public void repairWithNoNull(String[] repairParts) {
Assert.noNullElements(
repairParts,
"array of repairParts mustn't contain null elements");
// ...
}
Обратите внимание, что эта проверка по-прежнему проходит, если массив пуст, если в нем нет нулевых
элементов.
9. Заключение
В этой статье мы рассмотрели класс Assert .
Этот класс широко используется в среде Spring, но мы могли бы легко написать более надежный и выразительный код, используя его преимущества.
Как всегда, полный код для этой статьи можно найти в проекте GitHub .