このページでは、Rustテストハーネスを使用するrust_test
モジュールを構築する方法に関する基本的な情報を提供します。
基本的な錆テストを書く
オンデバイスおよびオンホストのRustテストの実際の例については、 keystore2 Android.bpを表示するか、 external/rust/crates
ディレクトリにある多くのクレートから1つを見つけてください。
rust_test
モジュールは、rustcの--test
フラグを使用してビルドします。このフラグは、 #[test]
属性でマークされたコードからテストを作成します。詳細については、 Rust ReferenceTestingAttributesのドキュメントを参照してください。
次のようにテストモジュールを定義します。
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",
},
]
}
unit_tests:
がfalse
に設定されていない限り、 rust_test_host
モジュールはデフォルトでpresubmitで実行されるため、 TEST_MAPPING
ファイルでこれらを宣言する必要はありません。
auto_gen_config
プロパティとtest_suites
プロパティの動作の詳細については、テスト開発ワークフローのドキュメントの「設定」セクションを参照してください。
注目すべき錆テストの特性
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回リストする必要があることです。1回はrust_library
用で、もう1回は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
モジュールに依存関係を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"],
}
このように、ライブラリとテストモジュールは常に同じ依存関係を使用します。