1. Огляд
У цьому посібнику ми зосередимось на описі мети класу Spring Assert та продемонструємо, як ним користуватися.
2. Призначення класу Assert
Клас Spring Assert допомагає нам перевірити аргументи. Використовуючи методи класу Assert , ми можемо писати припущення, які, як ми очікуємо, відповідають дійсності. І якщо вони не виконуються, виникає виняток часу виконання.
Кожен Затверджуй «s метод можна порівняти з Java Assert заяву. Інструкція Java assert видає помилку під час виконання, якщо її стан не вдається. Цікавий факт, що ці твердження можна відключити.
Ось декілька характеристик методів Spring Assert :
- Методи Assert статичні
- Вони кидають або IllegalArgumentException, або IllegalStateException
- Перший параметр, як правило, є аргументом для перевірки або логічною умовою для перевірки
- Останній параметр, як правило, є повідомленням про виняток, яке відображається, якщо перевірка не вдається
- Повідомлення може передаватися як параметр String або як параметр постачальника
Також зауважте, що, незважаючи на подібну назву, твердження Spring не мають нічого спільного з твердженнями JUnit та іншими тестовими системами. Весняні твердження не для тестування, а для налагодження.
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.
Як випливає з назви, його слід використовувати, коли метод не можна продовжувати через незаконний стан об’єкта.
Уявіть, що ми не можемо викликати метод палива (), якщо машина працює. Давайте використаємо твердження state () у цьому випадку:
public void fuel() { Assert.state(this.state.equals("stop"), "car must be stopped"); // ... }
Звичайно, ми можемо перевірити все, використовуючи логічні твердження. Але для кращої читабельності ми можемо використовувати додаткові твердження, які роблять наш код більш виразним.
5. Об'єкт і тип Assertio нс
5.1. notNull ()
Ми можемо припустити, що об’єкт не є нульовим , використовуючи метод notNull () :
public void сhangeOil(String oil) { Assert.notNull(oil, "oil mustn't be null"); // ... }
5.2. isNull ()
З іншого боку, ми можемо перевірити, чи є об’єкт нульовим, використовуючи метод 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); // ... }
Два останні твердження представляють відносини " це-це" .
6. Текстові твердження
Текстові твердження використовуються для перевірки аргументів рядка .
6.1. hasLength ()
We can check if a String isn't blank, meaning it contains at least one whitespace, by using the hasLength() method:
public void startWithHasLength(String key) { Assert.hasLength(key, "key must not be null and must not the empty"); // ... }
6.2. hasText()
We can strengthen the condition and check if a String contains at least one non-whitespace character, by using the hasText() method:
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()
We can determine if a String argument doesn’t contain a specific substring by using the doesNotContain() method:
public void startWithNotContain(String key) { Assert.doesNotContain(key, "123", "key mustn't contain 123"); // ... }
7. Collection and Map Assertions
7.1. notEmpty() for Collections
As the name says, the notEmpty() method asserts that a collection is not empty meaning that it’s not null and contains at least one element:
public void repair(Collection repairParts) { Assert.notEmpty( repairParts, "collection of repairParts mustn't be empty"); // ... }
7.2. notEmpty() for Maps
The same method is overloaded for maps, and we can check if a map is not empty and contains at least one entry:
public void repair(Map repairParts) { Assert.notEmpty( repairParts, "map of repairParts mustn't be empty"); // ... }
8. Array Assertions
8.1. notEmpty() for Arrays
Finally, we can check if an array is not empty and contains at least one element by using the notEmpty() method:
public void repair(String[] repairParts) { Assert.notEmpty( repairParts, "array of repairParts mustn't be empty"); // ... }
8.2. noNullElements()
We can verify that an array doesn’t contain null elements by using the noNullElements() method:
public void repairWithNoNull(String[] repairParts) { Assert.noNullElements( repairParts, "array of repairParts mustn't contain null elements"); // ... }
Зауважте, що ця перевірка все ще проходить, якщо масив порожній, доки в ньому немає нульових елементів.
9. Висновок
У цій статті ми дослідили клас Assert . Цей клас широко використовується в рамках Spring, але ми могли б легко написати більш надійний та виразний код, скориставшись цим.
Як завжди, повний код цієї статті можна знайти в проекті GitHub.