このページでは、Rust テストハーネスを使用する rust_test
モジュールのビルド方法に関する基本情報を提供します。
基本的な Rust テストを作成する
オンデバイスおよびオンホストの Rust テストの実例については、keystore2 Android.bp を参照するか、external/rust/crates
ディレクトリにある多数のクレートの中から見つけることができます。
rust_test
モジュールは、rustc の --test
フラグを使用してビルドします。これにより、#[test]
属性が付いたコードからテストが作成されます。詳細については、The Rust Reference の Testing Attributes(ドキュメント)をご覧ください。
テスト モジュールを次のように定義します。
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 ファイルを作成すると、このファイル内のテストは presubmit テストで実行され、atest
を使用して呼び出すことができます。
詳細については、TEST_MAPPING のドキュメントをご覧ください。ただし、libfoo_inline_tests
の例では、以下の行を presubmit に追加して、TreeHugger でテストを実行できるようにします。
{
"presubmit": [
{
"name": "libfoo_inline_tests",
},
]
}
rust_test_host
モジュールは、unit_tests:
が false
に設定されている場合を除き、presubmit においてデフォルトで実行されるため、TEST_MAPPING
ファイルで宣言する必要はありません。
auto_gen_config
プロパティと test_suites
プロパティの動作の詳細については、テスト開発ワークフローのドキュメントの設定セクションをご覧ください。
Rust テストの重要なプロパティ
バイナリ モジュールのページで説明されているように、rust_test
モジュールは rust_binary
モジュールからプロパティを継承します。
以下の表で定義されているプロパティは、すべてのモジュールに適用される重要な共通プロパティに加えて適用されます。これらは、Rust テスト モジュールにとって特に重要なものか、rust_test
モジュール タイプに固有の動作を示すものです。
- test_harness: 高度な使用方法。デフォルトは true です。
rust_test
が独自のテストハーネスを実装しており、組み込みの Rust テストハーネスを使用する必要がない場合は、これを false に設定します(false に設定すると、--test
フラグが rustc に渡されません)。
rust_library と rust_test の間の重複を回避する
ネストされたモジュールを介してインライン Rust テストを使用すると、Android.bp
ファイル内で重複が生じます。問題は、依存関係を 2 回リストする必要があることです(rust_library
で 1 回、rust_test
で 1 回)。
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
モジュール内に依存関係を 1 回だけリストしてください。
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"],
}
これにより、ライブラリとテスト モジュールで常に同じ依存関係が使用されます。