Модуль tests
Модуль tests - это соглашение об именовании модуля, который содержит модульные тесты. Обычно он объявляется с атрибутом #[cfg(test)], что позволяет компилировать этот модуль только при запуске тестов, а не при обычной сборке проекта. Внутри модуля tests размещаются функции с атрибутом #[test], которые и являются тестовыми случаями. Такой подход позволяет тестировать приватные функции и структуры, так как модуль tests является дочерним по отношению к тестируемому модулю.
Синтаксис
#[cfg(test)]
mod tests
{
use super::*;
#[test]
fn test_name()
{
// test body
}
}
Пример
Давайте создадим функцию сложения и протестируем её с помощью модуля tests:
fn add(a: i32, b: i32) -> i32
{
a + b
}
#[cfg(test)]
mod tests
{
use super::*;
#[test]
fn test_add()
{
let res = add(2, 3);
assert_eq!(res, 5);
}
}
fn main()
{
println!("{}", add(2, 3));
}
Результат выполнения кода:
5
Пример
Давайте протестируем функцию, возвращающую строку, и выведем результат в тесте:
fn greet() -> String
{
String::from("abcde")
}
#[cfg(test)]
mod tests
{
use super::*;
#[test]
fn test_greet()
{
let res = greet();
println!("{}", res);
assert_eq!(res, "abcde");
}
}
fn main()
{
println!("{}", greet());
}
Результат выполнения кода:
"abcde"
Смотрите также
-
атрибут
test,
который помечает функцию как тестовый случай -
атрибут
cfg(test),
который компилирует модуль только при запуске тестов -
макрос
assert!,
который проверяет истинность условия -
макрос
assert_eq!,
который проверяет равенство двух значений