Когда дело доходит до тестирования кода Rust, менеджер пакетов Cargo является незаменимым инструментом для большинства разработчиков. Однако могут возникнуть ситуации, когда вы захотите запустить тесты, не полагаясь на Cargo. В этой статье мы рассмотрим несколько методов запуска тестов Rust без Cargo, предоставив вам альтернативные подходы, соответствующие вашим потребностям. Итак, приступим!
Метод 1: прямое использование компилятора Rust
Один простой метод — использовать компилятор Rust непосредственно для компиляции и запуска ваших тестов. Вот пошаговый пример:
-
Скомпилируйте тестовый файл с помощью компилятора Rust:
$ rustc --test <test_file.rs> -
Запустите скомпилированный исполняемый файл теста:
$ ./<test_file>
Этот метод полезен, когда у вас есть один тестовый файл и вы хотите быстро проверить поведение без необходимости использования Cargo.
Метод 2: использование жгута для проверки на ржавчину
Rust предоставляет встроенный набор средств тестирования, который можно использовать для запуска тестов без Cargo. Тестовый пакет — это небольшая библиотека времени выполнения, специально разработанная для запуска тестов. Вот пример:
-
Добавьте функцию
testв файлCargo.toml:[dev-dependencies] rustc-test = "0.3" -
Создайте тестовую функцию в своем коде:
#[cfg(test)] mod tests { use rustc_test::test_case; #[test_case] fn my_test() { // Test assertions go here assert_eq!(2 + 2, 4); } } -
Скомпилируйте и запустите тесты, используя крейт
rustc-test:$ rustc --edition=2018 -C opt-level=3 --test <test_file.rs> --extern rustc_test $ ./<test_file>
Этот метод обеспечивает большую гибкость, поскольку вы можете определить несколько тестов в своей кодовой базе.
Метод 3. Использование модуля std::rt
Другой альтернативой является использование модуля std::rt, который обеспечивает низкоуровневую поддержку во время выполнения. Вот пример:
-
Импортируйте модуль
std::rtв свой код:#![feature(rustc_private)] extern crate rustc_driver; extern crate rustc_hir; use std::rt::entry; #[cfg(test)] mod tests { #[test] fn my_test() { // Test assertions go here assert_eq!(2 + 2, 4); } } fn main() { // Your main code goes here } #[cfg(not(test))] #[entry] fn start(_argc: isize, _argv: *const *const u8) -> isize { main(); 0 } -
Скомпилируйте и запустите тесты:
$ rustc --test <test_file.rs> --extern rustc_driver --extern rustc_hir $ ./<test_file>
Этот метод позволяет интегрировать тесты в основной код, сохраняя при этом их раздельность.
В этой статье мы рассмотрели несколько способов запуска тестов Rust без использования Cargo. Независимо от того, предпочитаете ли вы использовать компилятор Rust напрямую, использовать средства тестирования Rust или использовать модуль std::rt, теперь в вашем распоряжении есть альтернативные подходы. Выберите метод, который лучше всего соответствует вашим потребностям, и начните тестировать свой код Rust без проблем!
Выполняя тесты Rust без Cargo, вы можете оптимизировать процесс тестирования и получить больше контроля над выполнением тестов. Так зачем ограничивать себя только Cargo? Попробуйте эти методы и улучшите свой опыт разработки на Rust уже сегодня!