Инициализация в тестах
Инициализация в тестах - это процесс подготовки окружения перед запуском тестовых функций. В Rust для этого используются вспомогательные функции, которые вызываются в начале каждого теста. Такие функции могут создавать тестовые данные, настраивать конфигурацию, открывать соединения или выполнять другие подготовительные действия. Параметром инициализирующая функция может принимать необходимые для настройки значения, а возвращать - готовые к использованию структуры данных.
Синтаксис
fn setup() -> TestData
{
// подготовка данных
}
#[test]
fn test_something()
{
let data = setup();
// использование data
}
Пример
Давайте создадим функцию инициализации, которая подготавливает вектор с тестовыми данными, и используем её в тесте:
fn setup() -> Vec<i32>
{
vec![1, 2, 3, 4, 5]
}
#[test]
fn test_sum()
{
let data = setup();
let sum: i32 = data.iter().sum();
assert_eq!(sum, 15);
}
fn main()
{
let data = setup();
println!("{:?}", data);
}
Результат выполнения кода:
[1, 2, 3, 4, 5]
Пример
Давайте создадим функцию инициализации, которая принимает параметр и возвращает настроенную строку:
fn setup(prefix: &str) -> String
{
format!("{}-abcde", prefix)
}
#[test]
fn test_prefix()
{
let value = setup("test");
assert_eq!(value, "test-abcde");
}
fn main()
{
let value = setup("test");
println!("{}", value);
}
Результат выполнения кода:
"test-abcde"
Пример
Давайте используем инициализацию для подготовки структуры с несколькими полями:
struct TestData
{
numbers: Vec<i32>,
label: String,
}
fn setup() -> TestData
{
TestData {
numbers: vec![1, 2, 3, 4, 5],
label: String::from("abcde"),
}
}
#[test]
fn test_data()
{
let data = setup();
assert_eq!(data.numbers.len(), 5);
assert_eq!(data.label, "abcde");
}
fn main()
{
let data = setup();
println!("{:?}", data.numbers);
println!("{}", data.label);
}
Результат выполнения кода:
[1, 2, 3, 4, 5]
"abcde"
Смотрите также
-
атрибут
test,
который помечает функцию как тестовую -
атрибут
cfg(test),
который включает модуль только при тестировании -
макрос
assert_eq!,
который проверяет равенство двух значений -
макрос
should_panic,
который проверяет, что тест вызывает панику