РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
835 of 1245 menu

Инициализация в тестах

Инициализация в тестах - это процесс подготовки окружения перед запуском тестовых функций. В 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,
    который проверяет, что тест вызывает панику
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить