Атрибут #[test]
Атрибут #[test] применяется к функции и указывает
компилятору и инструменту cargo test, что данная
функция является тестом. Такая функция не принимает
параметров и не возвращает значения. Атрибут позволяет
автоматически обнаруживать и запускать тесты, проверяя
корректность работы кода.
Синтаксис
#[test]
fn test_name()
{
// test body
}
Пример
Давайте создадим простой тест, который проверяет, что сумма двух чисел равна ожидаемому значению:
#[test]
fn test_sum()
{
let res = 2 + 3;
assert_eq!(res, 5);
}
fn main()
{
println!("Run tests with cargo test");
}
Результат выполнения команды cargo test:
running 1 test
test test_sum ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Пример
Давайте создадим тест, который проверяет равенство строк:
#[test]
fn test_string()
{
let res = "abcde".contains("bcd");
assert!(res);
}
fn main()
{
println!("Run tests with cargo test");
}
Результат выполнения команды cargo test:
running 1 test
test test_string ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Пример
Давайте создадим падающий тест, чтобы увидеть, как выглядит сообщение об ошибке:
#[test]
fn test_fail()
{
let res = 2 + 2;
assert_eq!(res, 5);
}
fn main()
{
println!("Run tests with cargo test");
}
Результат выполнения команды cargo test:
running 1 test
test test_fail ... FAILED
failures:
---- test_fail stdout ----
assertion `left == right` failed
left: 4
right: 5
failures:
test_fail
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out
Смотрите также
-
атрибут
should_panic,
который проверяет, что тест вызывает панику -
атрибут
ignore,
который позволяет пропустить выполнение теста -
макрос
assert!,
который проверяет истинность выражения -
макрос
assert_eq!,
который проверяет равенство двух значений