0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Каждую проверку, которую мы написали для метода StringUtils.capitalize(), в тестировании принято называть<em>утверждением</em>(assert). Утверждения - ключевая часть тестов. Именно они проверяют работу кода:</p>
1
<p>Каждую проверку, которую мы написали для метода StringUtils.capitalize(), в тестировании принято называть<em>утверждением</em>(assert). Утверждения - ключевая часть тестов. Именно они проверяют работу кода:</p>
2
<p>Можно заметить, что все проверки строятся одинаковым способом: условие => исключение. Java, начиная с версии 1.4., поддерживает ключевое слово<em>assert</em>, которое предназначено для проверки утверждений:</p>
2
<p>Можно заметить, что все проверки строятся одинаковым способом: условие => исключение. Java, начиная с версии 1.4., поддерживает ключевое слово<em>assert</em>, которое предназначено для проверки утверждений:</p>
3
<p>Синтаксис достаточно прост:</p>
3
<p>Синтаксис достаточно прост:</p>
4
<ol><li>указываем ключевое слово<em>assert</em>,</li>
4
<ol><li>указываем ключевое слово<em>assert</em>,</li>
5
<li>пишем выражение или вызываем метод, результатом которого будет булево выражение (true или false),</li>
5
<li>пишем выражение или вызываем метод, результатом которого будет булево выражение (true или false),</li>
6
<li>опционально: после двоеточия можем указать некоторое строковое сообщение, которое будет передано вместе с ошибкой. В общем случае может быть не просто строка, а любое выражение, которое возвращает что-то отличное от void.</li>
6
<li>опционально: после двоеточия можем указать некоторое строковое сообщение, которое будет передано вместе с ошибкой. В общем случае может быть не просто строка, а любое выражение, которое возвращает что-то отличное от void.</li>
7
</ol><p>В случае если значение после ключевого слова<em>assert</em>будет равно false, то возникнет ошибка (будет выброшено AssertionError). Другими словами, assert true означает что всё хорошо, а assert false говорит об ошибке. Например, если в последнем примере метод StringUtils.capitalize("hello") вернёт что-то отличное от<em>Hello</em>, то мы увидим в консоли вот такое сообщение:</p>
7
</ol><p>В случае если значение после ключевого слова<em>assert</em>будет равно false, то возникнет ошибка (будет выброшено AssertionError). Другими словами, assert true означает что всё хорошо, а assert false говорит об ошибке. Например, если в последнем примере метод StringUtils.capitalize("hello") вернёт что-то отличное от<em>Hello</em>, то мы увидим в консоли вот такое сообщение:</p>
8
<p>В первой строке мы видим какое исключение было проброшено (java.lang.AssertionError) и сообщение, которое мы передали вместе с ним. Кроме сообщения, выводится бектрейс, по которому можно найти сработавшее утверждение. В данном случае необходимо изучать код на 12 строке в классе io.hexlet.LessonTest.</p>
8
<p>В первой строке мы видим какое исключение было проброшено (java.lang.AssertionError) и сообщение, которое мы передали вместе с ним. Кроме сообщения, выводится бектрейс, по которому можно найти сработавшее утверждение. В данном случае необходимо изучать код на 12 строке в классе io.hexlet.LessonTest.</p>
9
<p>Использование ключевого слова assert сделало наш код короче и проще для восприятия. Положительная проверка смотрится естественнее, так как это то, что мы ожидаем.</p>
9
<p>Использование ключевого слова assert сделало наш код короче и проще для восприятия. Положительная проверка смотрится естественнее, так как это то, что мы ожидаем.</p>
10
<p>Однако, ключевое слово<em>assert</em>было введено только в Java 1.4., это значит что в предыдущих версиях Java вполне можно было создать переменную или метод с именем<em>assert</em>. Программы в которых использовались такие имена могли стать неработоспособными после введения нового ключевого слова. Для сохранения обратной совместимости было принято решение, что по умолчанию механизм использования<em>assert</em>будет отключен. Если нужно чтобы ваши<em>assert</em>срабатывали, то при запуске программы указывается аргумент командной строки -enableassertions (-ea).</p>
10
<p>Однако, ключевое слово<em>assert</em>было введено только в Java 1.4., это значит что в предыдущих версиях Java вполне можно было создать переменную или метод с именем<em>assert</em>. Программы в которых использовались такие имена могли стать неработоспособными после введения нового ключевого слова. Для сохранения обратной совместимости было принято решение, что по умолчанию механизм использования<em>assert</em>будет отключен. Если нужно чтобы ваши<em>assert</em>срабатывали, то при запуске программы указывается аргумент командной строки -enableassertions (-ea).</p>
11
<p>Рассмотрим пример. Допустим у нас есть вот такой класс:</p>
11
<p>Рассмотрим пример. Допустим у нас есть вот такой класс:</p>
12
<p>Если мы его скомпилируем и запустим без дополнительных аргументов, то мы увидим на экране текст<em>Hello world</em>, несмотря на то, что 1 точно не равно 2. Чтобы включить<em>assert</em>нам необходимо сделать так:</p>
12
<p>Если мы его скомпилируем и запустим без дополнительных аргументов, то мы увидим на экране текст<em>Hello world</em>, несмотря на то, что 1 точно не равно 2. Чтобы включить<em>assert</em>нам необходимо сделать так:</p>
13
<p>Тогда в консоли вместо надписи<em>Hello world</em>мы увидим сообщение об ошибке:</p>
13
<p>Тогда в консоли вместо надписи<em>Hello world</em>мы увидим сообщение об ошибке:</p>
14
14