HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Встроенный в Java механизм проверки утверждений assert обладает рядом недостатков:</p>
1 <p>Встроенный в Java механизм проверки утверждений assert обладает рядом недостатков:</p>
2 <ol><li>Вы не можете быть уверены что он сработает в любой ситуации. Если запустить программу без аргумента -enableassertions (-ea), то проверки будут игнорироваться. Поэтому полагаться на assert в полной мере нельзя.</li>
2 <ol><li>Вы не можете быть уверены что он сработает в любой ситуации. Если запустить программу без аргумента -enableassertions (-ea), то проверки будут игнорироваться. Поэтому полагаться на assert в полной мере нельзя.</li>
3 <li>Сами проверки сильно ограничены. После ключевого слова assert может быть только либо true, либо false, а это значит что вам необходимо сначала самостоятельно подготовить данные к проверке.</li>
3 <li>Сами проверки сильно ограничены. После ключевого слова assert может быть только либо true, либо false, а это значит что вам необходимо сначала самостоятельно подготовить данные к проверке.</li>
4 <li>Результат проверки неинформативен. Вам вернётся только сообщение об ошибке с указанием номера строки и имени класса в котором произошла ошибка. Да, есть вариант передать текстовое сообщение вместе с ошибкой, но так не делают, потому что это слишком "ручной" способ, требующий больших усилий.</li>
4 <li>Результат проверки неинформативен. Вам вернётся только сообщение об ошибке с указанием номера строки и имени класса в котором произошла ошибка. Да, есть вариант передать текстовое сообщение вместе с ошибкой, но так не делают, потому что это слишком "ручной" способ, требующий больших усилий.</li>
5 </ol><p>В результате всё это привело к тому, что ключевым словом assert практически не пользуются. Более того, далеко не все Java-программисты смогут быстро ответить почему они иногда срабатывают, а иногда нет. Однако, это был отличный переход от использования<em>if</em>для проверки утверждения и ручного пробрасывания ошибок, к более чистому и понятному коду.</p>
5 </ol><p>В результате всё это привело к тому, что ключевым словом assert практически не пользуются. Более того, далеко не все Java-программисты смогут быстро ответить почему они иногда срабатывают, а иногда нет. Однако, это был отличный переход от использования<em>if</em>для проверки утверждения и ручного пробрасывания ошибок, к более чистому и понятному коду.</p>
6 <p>Сегодня мы рассмотрим библиотеку<em>AssertJ</em>, которая позволяет гораздо проще и удобнее писать тесты, а также получать достаточно информативный вывод об ошибках. При этом внутри будет всё равно лежать тот же самый механизм, который мы рассматривали в предыдущих уроках.</p>
6 <p>Сегодня мы рассмотрим библиотеку<em>AssertJ</em>, которая позволяет гораздо проще и удобнее писать тесты, а также получать достаточно информативный вывод об ошибках. При этом внутри будет всё равно лежать тот же самый механизм, который мы рассматривали в предыдущих уроках.</p>
7 <p><em>AssertJ</em>не входит в перечень стандартных библиотек, но её можно подключить к вашему проекту как любую другую стороннюю библиотеку:</p>
7 <p><em>AssertJ</em>не входит в перечень стандартных библиотек, но её можно подключить к вашему проекту как любую другую стороннюю библиотеку:</p>
8 <p>Точкой входа будет являться метод assertThat(), его можно импортировать вот так:</p>
8 <p>Точкой входа будет являться метод assertThat(), его можно импортировать вот так:</p>
9 <p>Написание тестов с использованием библиотеки<em>AssertJ</em>отличается от использования ключевого слова assert и базируется на цепочке методов. Такой подход называется<em>fluent API</em>. Давайте рассмотрим пример теста, написанного с использованием этой библиотеки:</p>
9 <p>Написание тестов с использованием библиотеки<em>AssertJ</em>отличается от использования ключевого слова assert и базируется на цепочке методов. Такой подход называется<em>fluent API</em>. Давайте рассмотрим пример теста, написанного с использованием этой библиотеки:</p>
10 <p>Теперь тест превращается в связный текст на английском языке. Его можно прочитать следующим образом:<em>Assert that a is equal to b</em>, что дословно можно перевести как "Утверждаем, что a равно b". В случае если утверждение окажется ложным, то будет выброшено AssertionFailedError из библиотеки org.opentest4j.AssertionFailedError. Вывод тестов также будет сформулирован как связный текст на английском языке. Например, если в предыдущем примере мы возьмём String b = "Hello, world", то получим следующее сообщение об ошибке:</p>
10 <p>Теперь тест превращается в связный текст на английском языке. Его можно прочитать следующим образом:<em>Assert that a is equal to b</em>, что дословно можно перевести как "Утверждаем, что a равно b". В случае если утверждение окажется ложным, то будет выброшено AssertionFailedError из библиотеки org.opentest4j.AssertionFailedError. Вывод тестов также будет сформулирован как связный текст на английском языке. Например, если в предыдущем примере мы возьмём String b = "Hello, world", то получим следующее сообщение об ошибке:</p>
11 <p>В первой строке мы видим сообщение о проброшенной ошибке, а далее текст, который можно перевести как: "Ожидали, что<em>Hello, world!</em>будет равен<em>"Hello, world"</em>, но это оказалось не так". Ниже отдельно вынесены ещё раз "ожидание/реальность". Такой вывод об ошибках читать уже гораздо приятнее, он является куда более информативным.</p>
11 <p>В первой строке мы видим сообщение о проброшенной ошибке, а далее текст, который можно перевести как: "Ожидали, что<em>Hello, world!</em>будет равен<em>"Hello, world"</em>, но это оказалось не так". Ниже отдельно вынесены ещё раз "ожидание/реальность". Такой вывод об ошибках читать уже гораздо приятнее, он является куда более информативным.</p>