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 может выполнять несколько тестов одновременно, поэтому убедитесь, что они не участвуют в гонках друг с другом. Например, если они все выводят в файл, вы должны заставить их записывать в разные файлы.

<p id="Скрипты_сборки"><strong><a l:href="#Скрипты_сборки">Скрипты сборки</a></strong></p>

Иногда обычной сборки, предоставляемой cargo, недостаточно. Возможно вашему крейту нужны некоторые предварительные условия, прежде чем он успешно скомпилируется, например кодогенерация или предварительно должен скомпилироваться какой-то нативный код. Для решения этой проблемы, мы имеем скрипты сборки, которые cargo может запустить.

Для добавления скрипта сборки в ваш пакет, вы можете указать его в Cargo.toml следующим образом:

[package]

...

build = "build.rs"

Иначе по умолчанию cargo будет искать файл build.rs в директории проекта.

<p id="Как_использовать_скрипт_сборки"><strong><a l:href="#Как_использовать_скрипт_сборки">Как использовать скрипт сборки</a></strong></p>

Скрипт сборки - это просто другой файл на Rust, который будет скомпилирован и вызван до компиляции чего-либо другого в пакете. Следовательно он может быть использовать для выполнения предварительных условий вашего крейта.

Через переменные окружения cargo предоставляет скрипту входные параметры описанные здесь, которые могут быть использованы.

Скрипт возвращает значения через stdout. Все напечатанные строки записываются в target/debug/build//output. Кроме того, строки с префиксом cargo: напрямую интерпретируются cargo и следовательно могут быть использованы для объявления параметров для компиляции пакета.

Больше информации и примеров можно найти в спецификации cargo.

<p id="Атрибуты"><strong><a l:href="#Атрибуты">Атрибуты</a></strong></p>

Атрибуты — это метаданные, применяемые к какому-либо модулю, контейнеру или их элементу. Благодаря атрибутам можно:

   • задать условия компиляции кода

   • задать имя, версию и тип (библиотека или исполняемый файл) контейнера

   • отключить проверки (lints)

   • включить возможности компилятора (макросы, глобальный импорт и другое)

   • линковаться с внешней библиотекой

   • пометить функции как модульные тесты

   • пометить функции, которые будут частью теста производительности

Когда атрибуты применяются ко всему контейнеру, их синтаксис будет #![crate_attribute], а когда они применяются к модулю или элементу модуля, их синтаксис станет #[item_attribute] (обратите внимание на отсутствие !).

Атрибуты могут принимать аргументы с различным синтаксисом:

   • #[attribute = "value"]

   • #[attribute(key = "value")]

   • #[attribute(value)]

Атрибуты могут иметь несколько значений и быть разделены несколькими строками:

#[attribute(value, value2)]

#[attribute(value, value2, value3,

value4, value5)]

<p id="dead_code"><strong><a l:href="#dead_code">dead_code</a></strong></p>

Компилятор предоставляет проверку dead_code, которая предупреждает о неиспользованных функциях. Атрибут dead_code можно использовать, чтобы отключить данную проверку.

fn used_function() {}

// `#[allow(dead_code)]` — атрибут, который убирает проверку на неиспользуемый код

#[allow(dead_code)]

fn unused_function() {}

fn noisy_unused_function() {}

Перейти на страницу:

Похожие книги