РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
827 of 1245 menu

Атрибут should_panic

Атрибут should_panic применяется к тестовым функциям и указывает, что тест считается успешным только в том случае, если во время его выполнения произошла паника. Если паника не возникла, тест завершается с ошибкой. Атрибут можно использовать как без параметров, так и с параметром expected, который задаёт подстроку ожидаемого сообщения о панике.

Без параметров атрибут should_panic просто проверяет факт возникновения паники. С параметром expected тест дополнительно проверяет, что сообщение о панике содержит указанную подстроку. Это позволяет убедиться, что паника вызвана именно ожидаемой причиной, а не случайной ошибкой.

Атрибут should_panic работает совместно с атрибутом #[test] и применяется только к тестовым функциям. Его можно комбинировать с другими атрибутами тестирования.

Синтаксис

#[test] #[should_panic] fn test_name() { // код, который должен вызвать панику }

С параметром expected:

#[test] #[should_panic(expected = "текст сообщения")] fn test_name() { // код, который должен вызвать панику }

Пример

Давайте напишем тест, который должен вызвать панику с помощью макроса panic!:

#[test] #[should_panic] fn test_panic() { panic!("something went wrong"); }

Этот тест пройдёт успешно, потому что внутри функции произошла паника. Если бы паники не было, тест завершился бы с ошибкой.

Пример

Давайте напишем тест, который проверяет конкретное сообщение о панике с помощью параметра expected:

#[test] #[should_panic(expected = "division by zero")] fn test_division() { let a = 10; let b = 0; if b == 0 { panic!("division by zero"); } let _res = a / b; }

Этот тест пройдёт успешно, так как сообщение о панике содержит подстроку "division by zero".

Пример

Давайте напишем тест, который проверяет панику при выходе за границы массива:

#[test] #[should_panic] fn test_index_out_of_bounds() { let arr = vec![1, 2, 3, 4, 5]; let _res = arr[10]; }

Этот тест пройдёт успешно, потому что обращение к элементу с индексом 10 вызовет панику.

Пример

Давайте напишем тест, который НЕ пройдёт, потому что паника не возникает:

#[test] #[should_panic] fn test_no_panic() { let res = 2 + 2; println!("{}", res); }

Этот тест завершится с ошибкой, потому что внутри функции не произошло паники, а атрибут should_panic требует её наличия.

Смотрите также

  • атрибут test,
    который помечает функцию как тестовую
  • атрибут should_panic expected,
    который проверяет конкретное сообщение о панике
  • макрос panic!,
    который вызывает панику с заданным сообщением
  • атрибут ignore,
    который позволяет пропустить выполнение теста
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить