テストモジュール

このページでは、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_libraryrust_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"],
}

このように、ライブラリとテストモジュールは常に同じ依存関係を使用します。