Каждую проверку, которую мы написали для метода StringUtils.capitalize()
, в тестировании принято называть утверждением (assert). Утверждения — ключевая часть тестов. Именно они проверяют работу кода:
// Первое утверждение (проверка на пустую строку)
if (!"".equals(StringUtils.capitalize(""))) {
throw new AssertionError("Метод работает неверно!");
}
// Второе утверждение (проверка на слово)
if (!"Hello".equals(StringUtils.capitalize("hello"))) {
throw new AssertionError("Метод работает неверно!");
}
Можно заметить, что все проверки строятся одинаковым способом: условие => исключение. Java, начиная с версии 1.4., поддерживает ключевое слово assert, которое предназначено для проверки утверждений:
// Проверка сменилась с отрицательной на положительную
// Утверждение считается пройденным, если условие истинно
assert 4 == 2 + 2;
assert "".equals(StringUtils.capitalize(""));
// Опциональное сообщение об ошибке
// Указывается после двоеточия
assert "Hello".equals(StringUtils.capitalize("hello")) : "Ваш метод не работает!";
Синтаксис достаточно прост:
true
или false
),void
.В случае если значение после ключевого слова assert будет равно false
, то возникнет ошибка (будет выброшено AssertionError
). Другими словами, assert true
означает что всё хорошо, а assert false
говорит об ошибке. Например, если в последнем примере метод StringUtils.capitalize("hello")
вернёт что-то отличное от Hello, то мы увидим в консоли вот такое сообщение:
java.lang.AssertionError: Ваш метод не работает!
at io.hexlet.LessonTest.testMain(LessonTest.java:12)
...
В первой строке мы видим какое исключение было проброшено (java.lang.AssertionError
) и сообщение, которое мы передали вместе с ним. Кроме сообщения, выводится бектрейс, по которому можно найти сработавшее утверждение. В данном случае необходимо изучать код на 12 строке в классе io.hexlet.LessonTest
.
Использование ключевого слова assert
сделало наш код короче и проще для восприятия. Положительная проверка смотрится естественнее, так как это то, что мы ожидаем.
Однако, ключевое слово assert было введено только в Java 1.4., это значит что в предыдущих версиях Java вполне можно было создать переменную или метод с именем assert. Программы в которых использовались такие имена могли стать неработоспособными после введения нового ключевого слова. Для сохранения обратной совместимости было принято решение, что по умолчанию механизм использования assert будет отключен. Если нужно чтобы ваши assert срабатывали, то при запуске программы указывается аргумент командной строки -enableassertions
(-ea
).
Рассмотрим пример. Допустим у нас есть вот такой класс:
class HelloWorld {
public static void main(String[] args) {
assert 1 == 2; // заведомо ложное утверждение
System.out.println("Hello world");
}
}
Если мы его скомпилируем и запустим без дополнительных аргументов, то мы увидим на экране текст Hello world, несмотря на то, что 1 точно не равно 2. Чтобы включить assert нам необходимо сделать так:
java -ea HelloWorld.java
# Boom!
Тогда в консоли вместо надписи Hello world мы увидим сообщение об ошибке:
Exception in thread "main" java.lang.AssertionError
at HelloWorld.main(HelloWorld.java:4)
Вам ответят команда поддержки Хекслета или другие студенты.
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Зарегистрируйтесь или войдите в свой аккаунт