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

Атрибут should_panic(expected)

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

Если тестируемая функция не паникует или сообщение паники не содержит указанную подстроку, тест считается проваленным.

Синтаксис

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

Пример

Давайте напишем тест, который проверяет, что функция паникует с сообщением, содержащим подстроку "invalid input":

fn process(value: i32) { if value < 0 { panic!("invalid input: value is negative"); } } #[cfg(test)] mod tests { use super::*; #[test] #[should_panic(expected = "invalid input")] fn test_negative_value() { process(-1); } } fn main() { println!("tests run separately"); }

Результат выполнения теста:

test tests::test_negative_value ... ok

Пример

Давайте рассмотрим случай, когда сообщение паники не совпадает с ожидаемым. Тест будет провален:

fn divide(a: i32, b: i32) -> i32 { if b == 0 { panic!("division by zero"); } a / b } #[cfg(test)] mod tests { use super::*; #[test] #[should_panic(expected = "invalid divisor")] fn test_divide_by_zero() { divide(10, 0); } } fn main() { println!("tests run separately"); }

Результат выполнения теста:

test tests::test_divide_by_zero ... FAILED failures: ---- tests::test_divide_by_zero stdout ---- thread 'tests::test_divide_by_zero' panicked at 'division by zero', src/main.rs:5:6 note: panic did not contain expected string panic message: `"division by zero"`, expected substring: `"invalid divisor"`

Как видно из результата, тест не прошёл, потому что сообщение паники "division by zero" не содержит ожидаемую подстроку "invalid divisor".

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

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