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

Атрибут #[cfg(test)]

Атрибут #[cfg(test)] - это условный атрибут компиляции, который указывает компилятору включать помеченный код только тогда, когда проект собирается в режиме тестирования. Параметров атрибут не принимает. Чаще всего он используется для объявления модуля с тестами через mod tests, чтобы тестовый код не попадал в итоговую сборку программы.

Синтаксис

#[cfg(test)] mod tests { // тестовый код }

Пример

Давайте объявим функцию сложения и модуль с тестом, помеченный атрибутом #[cfg(test)]:

fn add(a: i32, b: i32) -> i32 { a + b } #[cfg(test)] mod tests { use super::*; #[test] fn test_add() { assert_eq!(add(2, 3), 5); } } fn main() { println!("{}", add(2, 3)); }

Результат выполнения кода:

5

Пример

Давайте проверим, что при обычной сборке модуль с тестами не компилируется. Для этого поместим внутрь модуля намеренно ошибочный код:

#[cfg(test)] mod tests { fn broken() -> i32 { "not a number" } } fn main() { println!("program works"); }

Результат выполнения кода:

"program works"

При запуске cargo test этот же код вызовет ошибку компиляции, потому что модуль tests будет включён в сборку.

Пример

Атрибут #[cfg(test)] можно применять не только к модулю, но и к отдельным функциям или импортам:

#[cfg(test)] use std::collections::HashMap; fn main() { let res = 2 + 2; println!("{}", res); } #[cfg(test)] fn helper_for_tests() -> bool { true }

Результат выполнения кода:

4

Смотрите также

  • атрибут cfg,
    который управляет условной компиляцией кода
  • атрибут cfg(not(test)),
    который включает код только вне режима тестирования
  • модуль mod tests,
    который conventionally содержит тестовые функции
  • макрос assert_eq!,
    который проверяет равенство двух значений в тестах
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить