-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAssertJ.txt
86 lines (69 loc) · 5.09 KB
/
AssertJ.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
****** Библиотека AssertJ (очень кратко) ******
Встроенный в Java механизм проверки утверждений - assert - обладает
рядом недостатков:
- Вы не можете быть уверены что он сработает в любой ситуации.
Если запустить программу без аргумента - enableassertions (-ea),
то проверки будут игнорироваться. Поэтому полагаться на assert
в полной мере нельзя.
- Сами проверки сильно ограничены. После ключевого слова assert
может быть только либо true, либо false, а это значит что вам
необходимо сначала самостоятельно подготовить данные к проверке.
- Результат проверки неинформативен. Вам вернётся только сообщение
об ошибке с указанием номера строки и имени класса в котором
произошла ошибка. Да, есть вариант передать текстовое сообщение
вместе с ошибкой, но так не делают, потому что это слишком "ручной"
способ, требующий больших усилий.
В результате всё это привело к тому, что ключевым словом assert практически
не пользуются. Более того, далеко не все Java-программисты смогут быстро
ответить почему они иногда срабатывают, а иногда нет. Однако, это был отличный
переход от использования if для проверки утверждения и ручного пробрасывания
ошибок, к более чистому и понятному коду.
Библиотека AssertJ позволяет гораздо проще и удобнее писать тесты, а также
получать достаточно информативный вывод об ошибках. При этом внутри будет
всё равно лежать тот же самый механизм, что и в Junit.
AssertJ не входит в перечень стандартных библиотек, но её можно подключить
к нашему проекту как любую другую стороннюю библиотеку, в зависимости от
сборщика проектов.
Например, pom.xml в Maven:
****************************************************************************
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.24.2</version>
<scope>test</scope>
</dependency>
****************************************************************************
Точкой входа будет являться метод *.assertThat(), его можно импортировать:
import static org.assertj.core.api.Assertions.assertThat;
Написание тестов с использованием библиотеки AssertJ отличается от
использования ключевого слова assert и базируется на цепочке методов.
Такой подход называется fluent API.
Пример:
****************************************************************************
import static org.assertj.core.api.Assertions.assertThat;
class SomeClassTest {
public static void testMethod() {
var a = "Hello, world!";
var b = "Hello, world!";
assertThat(a).isEqualTo(b);
}
}
****************************************************************************
Теперь тест превращается в связный текст на английском языке - повествование.
Его можно прочитать следующим образом: "Assert that a is equal to b", что можно
перевести как "Утверждаем, что 'a' равно 'b'".
В случае если утверждение окажется ложным, то будет выброшено AssertionFailedError
из библиотеки org.opentest4j.AssertionFailedError. Вывод тестов также будет
сформулирован как связный текст на английском языке. Т.е. если в предыдущем
примере мы возьмём String b = "Hello, world", то получим следующее сообщение
об ошибке:
****************************************************************************
org.opentest4j.AssertionFailedError:
Expecting:
<"Hello, world!">
to be equal to:
<"Hello, world">
but was not.
Expected :Hello, world
Actual :Hello, world!
****************************************************************************