Фильтр тестов
Фильтр тестов - это механизм, встроенный в
cargo test, который позволяет
запускать не все тесты сразу, а только те,
чьи имена совпадают с заданным шаблоном.
Параметром фильтра выступает строка-подстрока,
которая передается в командной строке после
cargo test. Фильтр сравнивает эту
подстроку с полным именем каждого теста и
запускает только совпавшие.
Синтаксис
cargo test <фильтр>
Пример
Давайте создадим модуль с тестами и применим
к нему фильтр. В файле src/lib.rs
разместим три теста:
pub fn add(a: i32, b: i32) -> i32
{
a + b
}
pub fn sub(a: i32, b: i32) -> i32
{
a - b
}
#[cfg(test)]
mod tests
{
use super::*;
#[test]
fn test_add()
{
assert_eq!(add(2, 3), 5);
}
#[test]
fn test_sub()
{
assert_eq!(sub(5, 3), 2);
}
#[test]
fn test_add_negative()
{
assert_eq!(add(-2, -3), -5);
}
}
Запустим только те тесты, в имени которых
встречается подстрока add:
cargo test add
Результат выполнения команды:
running 2 tests
test tests::test_add ... ok
test tests::test_add_negative ... ok
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 1 filtered out
Пример
Давайте запустим только те тесты, в имени
которых встречается подстрока sub:
cargo test sub
Результат выполнения команды:
running 1 test
test tests::test_sub ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 2 filtered out
Пример
Фильтр можно комбинировать с флагом
-- для передачи аргументов
тестовому бинарнику. Давайте запустим
тесты с фильтром test и покажем
вывод каждого теста:
cargo test test -- --show-output
Результат выполнения команды:
running 3 tests
test tests::test_add ... ok
test tests::test_sub ... ok
test tests::test_add_negative ... ok
test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Смотрите также
-
атрибут
cfg(test),
который включает модуль только при тестировании -
атрибут
test,
который помечает функцию как тестовую -
команда
cargo test,
которая запускает все тесты проекта -
атрибут
ignore,
который исключает тест из запуска