cargo естественно, обеспечивает простой способ запуска всех ваших тестов!
$ cargo test
Вы должны увидеть примерно такой результат:
$ cargo test
Compiling blah v0.1.0 (file:///nobackup/blah)
Finished dev [unoptimized + debuginfo] target(s) in 0.89 secs
Running target/debug/deps/blah-d3b32b97275ec472
running 3 tests
test test_bar ... ok
test test_baz ... ok
test test_foo_bar ... ok
test test_foo ... ok
test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Вы также можете запустить тесты, чьё имя соответствует шаблону:
$ cargo test test_foo
$ cargo test test_foo
Compiling blah v0.1.0 (file:///nobackup/blah)
Finished dev [unoptimized + debuginfo] target(s) in 0.35 secs
Running target/debug/deps/blah-d3b32b97275ec472
running 2 tests
test test_foo ... ok
test test_foo_bar ... ok
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 2 filtered out
Одно слово предостережения: Cargo может выполнять несколько тестов одновременно, поэтому убедитесь, что они не участвуют в гонках друг с другом. Например, если они все выводят в файл, вы должны заставить их записывать в разные файлы.
Иногда обычной сборки, предоставляемой cargo, недостаточно. Возможно вашему крейту нужны некоторые предварительные условия, прежде чем он успешно скомпилируется, например кодогенерация или предварительно должен скомпилироваться какой-то нативный код. Для решения этой проблемы, мы имеем скрипты сборки, которые cargo может запустить.
Для добавления скрипта сборки в ваш пакет, вы можете указать его в Cargo.toml следующим образом:
[package]
...
build = "build.rs"
Иначе по умолчанию cargo будет искать файл build.rs в директории проекта.
Скрипт сборки - это просто другой файл на Rust, который будет скомпилирован и вызван до компиляции чего-либо другого в пакете. Следовательно он может быть использовать для выполнения предварительных условий вашего крейта.
Через переменные окружения cargo предоставляет скрипту входные параметры описанные здесь
, которые могут быть использованы.Скрипт возвращает значения через stdout. Все напечатанные строки записываются в target/debug/build/
Больше информации и примеров можно найти в спецификации cargo
.Атрибуты — это метаданные, применяемые к какому-либо модулю, контейнеру или их элементу. Благодаря атрибутам можно:
• задать условия компиляции кода
• задать имя, версию и тип (библиотека или исполняемый файл) контейнера
• отключить проверки
(lints)• включить возможности компилятора (макросы, глобальный импорт и другое)
• линковаться с внешней библиотекой
• пометить функции как модульные тесты
• пометить функции, которые будут частью теста производительности
Когда атрибуты применяются ко всему контейнеру, их синтаксис будет #![crate_attribute], а когда они применяются к модулю или элементу модуля, их синтаксис станет #[item_attribute] (обратите внимание на отсутствие !).
Атрибуты могут принимать аргументы с различным синтаксисом:
• #[attribute = "value"]
• #[attribute(key = "value")]
• #[attribute(value)]
Атрибуты могут иметь несколько значений и быть разделены несколькими строками:
#[attribute(value, value2)]
#[attribute(value, value2, value3,
value4, value5)]
Компилятор предоставляет
fn used_function() {}
// `#[allow(dead_code)]` — атрибут, который убирает проверку на неиспользуемый код
#[allow(dead_code)]
fn unused_function() {}
fn noisy_unused_function() {}