Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpMdTs 65 of 288 menu
◀ ▶

Встроенные тесты в Rust

Проверку логики можно держать рядом с функциями, которые тестируют. Для этого пишут отдельные функции, которые сборщик запускает только по команде тестирования, а не при обычном cargo run.

Тестовый блок оборачивают атрибутом #[cfg(test)], чтобы он не попадал в обычную сборку. Внутри функцию помечают #[test]:

fn twice(n: i32) -> i32 { n * 2 } #[cfg(test)] mod tests { #[test] fn adds() { assert_eq!(2 + 2, 4); } } fn main() { println!("{}", twice(2)); }

Команда assert_eq! сравнивает два значения. Если они не совпали, тест не проходит и команда тестирования завершится с ошибкой. Успешный прогон покажет имя функции adds среди пройденных.

Запуск из корня проекта:

cargo test

Можно проверить и свою функцию, а не только арифметику:

pub fn twice(n: i32) -> i32 { n * 2 } #[cfg(test)] mod tests { use super::*; #[test] fn doubles() { assert_eq!(twice(3), 6); } }

Дана функция:

fn triple(n: i32) -> i32 { n * 3 }

Добавьте блок tests с одним тестом, который проверяет triple(2) через assert_eq!, и запустите cargo test.

Дан следующий код:

#[cfg(test)] mod tests { #[test] fn wrong() { assert_eq!(1 + 1, 3); } }

Скажите, пройдет ли cargo test и что сообщит assert_eq! при несовпадении.

Объясните, зачем блок тестов помечают #[cfg(test)], если точка входа и так не вызывает эти функции.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить