このページでは、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"],
}
このように、ライブラリとテストモジュールは常に同じ依存関係を使用します。