На этой странице представлена базовая информация о том, как создать модуль rust_test , использующий тестовую среду Rust.
Напишите базовый тест Rust
 Для живого примера тестирования Rust на устройстве и хосте просмотрите keystore2 Android.bp или найдите один из множества ящиков в каталоге external/rust/crates .
 Модуль rust_test собирается с использованием флага rustc --test , который создаёт тесты из кода, помеченного атрибутом #[test] . Подробнее см. в документации по атрибутам тестирования The Rust Reference .
Определите тестовый модуль следующим образом:
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"],
}
Таким образом, библиотека и тестовый модуль всегда будут использовать одни и те же зависимости.
