Тип Result<(), Box>
Тип Result<(), Box<dyn Error>> используется
в тестовых функциях Rust для возврата ошибки.
Если тест завершается успешно, функция возвращает
Ok(()). Если в тесте возникает ошибка,
функция возвращает Err с описанием ошибки.
Этот тип особенно удобен тем, что позволяет
использовать оператор ? внутри теста
для проброса ошибок без ручной обработки.
Синтаксис
#[test]
fn test_name() -> Result<(), Box<dyn Error>>
{
// test body
Ok(())
}
Пример
Давайте напишем тест, который проверяет,
что строка "abcde" имеет длину 5.
При совпадении вернём Ok(()):
use std::error::Error;
#[test]
fn test_length() -> Result<(), Box<dyn Error>>
{
let s = "abcde";
if s.len() == 5
{
Ok(())
}
else
{
Err("length mismatch".into())
}
}
Результат выполнения теста:
test test_length ... ok
Пример
Давайте напишем тест, который использует
оператор ? для проброса ошибки
из функции parse:
use std::error::Error;
#[test]
fn test_parse() -> Result<(), Box<dyn Error>>
{
let n: i32 = "12345".parse()?;
assert_eq!(n, 12345);
Ok(())
}
Результат выполнения теста:
test test_parse ... ok
Пример
Давайте напишем тест, который завершится ошибкой из-за неудачного парсинга строки:
use std::error::Error;
#[test]
fn test_bad_parse() -> Result<(), Box<dyn Error>>
{
let n: i32 = "abcde".parse()?;
println!("{}", n);
Ok(())
}
Результат выполнения теста:
test test_bad_parse ... FAILED
Смотрите также
-
атрибут
test,
который помечает функцию как тестовую -
макрос
assert_eq!,
который проверяет равенство двух значений -
макрос
assert!,
который проверяет истинность условия -
макрос
panic!,
который прерывает выполнение с сообщением об ошибке