Читаем Rust на примерах полностью

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() {}

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

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

Компьютерные сети. 6-е изд.
Компьютерные сети. 6-е изд.

Перед вами шестое издание самой авторитетной книги по современным сетевым технологиям, написанное признанным экспертом Эндрю Таненбаумом в соавторстве со специалистом компании Google Дэвидом Уэзероллом и профессором Чикагского университета Ником Фимстером. Первая версия этого классического труда появилась на свет в далеком 1980 году, и с тех пор каждое издание книги неизменно становилось бестселлером. В книге последовательно изложены основные концепции, определяющие современное состояние компьютерных сетей и тенденции их развития. Авторы подробно объясняют устройство и принципы работы аппаратного и программного обеспечения, рассматривают все аспекты и уровни организации сетей — от физического до прикладного. Изложение теоретических принципов дополняется яркими, показательными примерами функционирования интернета и компьютерных сетей различного типа. Большое внимание уделяется сетевой безопасности. Шестое издание полностью переработано с учетом изменений, произошедших в сфере сетевых технологий за последние годы, и, в частности, освещает такие технологии, как DOCSIS, 4G и 5G, беспроводные сети стандарта 802.11ax, 100-гигабитные сети Ethernet, интернет вещей, современные транспортные протоколы CUBIC TCP, QUIC и BBR, программно-конфигурируемые сети и многое другое.

Дэвид Уэзеролл , Ник Фимстер , Эндрю Таненбаум

Учебные пособия, самоучители