На этой странице представлена основная информация о том, как собрать модуль rust_test , использующий тестовую среду Rust.
Напишите простой тест на Rust.
Чтобы увидеть наглядный пример теста Rust на устройстве и на хосте, просмотрите файл keystore2 Android.bp или найдите его во многих крейтах в каталоге external/rust/crates .
Модуль rust_test собирается с использованием флага --test из rustc, который создает тесты из кода, помеченного атрибутом #[test] . Для получения дополнительной информации см. документацию по атрибутам тестирования в справочнике Rust .
Определите тестовый модуль следующим образом:
rust_test {
name: "libfoo_inline_tests",
// Specify the entry point of your library or binary to run all tests
// specified in-line with the test attribute.
srcs: ["src/lib.rs"],
// Tradefed test suite to include this test in.
test_suites: ["general-tests"],
// Autogenerate the test config
auto_gen_config: true,
rustlibs: [
"libfoo",
],
}
Файл TEST_MAPPING содержит список тестов. Хотя это и не обязательное требование, если вы создадите файл TEST_MAPPING, включенные в него тесты будут выполняться в рамках предварительных тестов и могут быть вызваны с помощью atest .
Для получения дополнительной информации вы можете обратиться к документации TEST_MAPPING , но для примера libfoo_inline_tests добавьте это в presubmit, чтобы разрешить запуск ваших тестов на TreeHugger:
{
"presubmit": [
{
"name": "libfoo_inline_tests",
},
]
}
Обратите внимание, что модули rust_test_host запускаются по умолчанию в presubmit, если unit_tests: не установлен в false , поэтому вам не нужно объявлять их в файлах TEST_MAPPING .
Для получения более подробной информации о работе свойств auto_gen_config и test_suites см. раздел «Настройки» в документации по рабочему процессу разработки тестов .
Примечательные свойства теста на ржавчину
Модули rust_test наследуют свойства от модулей rust_binary , как описано на странице «Бинарные модули» .
Свойства, определенные в таблице ниже, дополняют важные общие свойства , применимые ко всем модулям. Они либо особенно важны для тестовых модулей Rust, либо демонстрируют уникальное поведение, специфичное для типа модуля rust_test .
- test_harness : Расширенные возможности использования, по умолчанию — true.
Установите это значение на false, если ваш rust_test реализует собственную тестовую среду, и вам не нужно использовать встроенную тестовую среду Rust (другими словами, установка этого значения на false не передаст флаг --test в rustc).
Избегайте дублирования между rust_library и rust_test.
При использовании встроенных тестов Rust через вложенные модули в файле Android.bp возникает дублирование. Проблема в том, что приходится указывать зависимости дважды: один раз для rust_library и один раз для rust_test .
rust_library {
name: "libfoo",
srcs: ["src/lib.rs"],
rustlibs: [
"libx",
"liby",
"libz",
],
}
rust_test {
name: "libfoo_inline_tests",
srcs: ["src/lib.rs"],
test_suites: ["general-tests"],
rustlibs: [
"libx",
"liby",
"libz",
],
}
В итоге каждый модуль rust_test будет содержать список тех же зависимостей, что и соответствующий модуль rust_library . Для обеспечения согласованности между модулями вы можете перечислить зависимости только один раз в модуле rust_defaults :
rust_defaults {
name: "libfoo_defaults",
srcs: ["src/lib.rs"],
rustlibs: [
"libx",
"liby",
"libz",
],
}
rust_library {
name: "libfoo",
defaults: ["libfoo_defaults"],
}
rust_test {
name: "libfoo_inline_tests",
defaults: ["libfoo_defaults"],
test_suites: ["general-tests"],
}
Таким образом, библиотека и тестовый модуль всегда будут использовать одни и те же зависимости.