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

Конфигурация cfg

Атрибут cfg управляет условной компиляцией кода. Он принимает в качестве параметра одно или несколько условий, которые проверяются во время компиляции. Если условие истинно, код включается в сборку, иначе - исключается. В контексте тестирования cfg чаще всего используется с условием test, которое активируется только при запуске команды cargo test. Параметром атрибут принимает предикат конфигурации, например test, not(test) или debug_assertions.

Синтаксис

#[cfg(predicate)] // code

Пример

Давайте напишем функцию, которая доступна только во время тестирования, используя условие test:

#[cfg(test)] fn helper() -> i32 { 42 } fn main() { println!("main function"); }

При обычной сборке функция helper не будет включена в бинарный файл. Результат выполнения команды cargo run:

"main function"

Пример

Давайте используем условие not(test), чтобы код выполнялся только вне тестов:

#[cfg(not(test))] fn production_only() -> &'static str { "production" } fn main() { #[cfg(not(test))] println!("{}", production_only()); }

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

"production"

Пример

Давайте проверим работу условной компиляции в тестовом модуле, комбинируя 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)); }

При запуске cargo test модуль tests будет скомпилирован, а при cargo run - исключён. Результат выполнения cargo run:

5

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

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