Test modülleri

Bu sayfada, rust_test modülü oluşturma hakkında temel bilgiler verilmektedir. bir test paketidir.

Temel paslanma testi yazma

Cihaz üzerinde ve ana makine üzerinde Rust testinin canlı örneği için keystore2 Android.bp veya external/rust/crates dizinindeki kasalardan birini bulabilirsiniz.

rust_test modülü, testler oluşturan rustc'ın --test işaretini kullanarak derleme yapar #[test] özelliğiyle işaretlenmiş kod yok. Daha fazla bilgi için Rust Referans Test Özellikleri dokümanlarına bakın.

Aşağıdaki gibi bir test modülü tanımlayın:

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 dosyası testlerin listesini içerir. Zorunlu olmasa da bir TEST_MAPPING dosyası oluşturursanız bu dosyaya eklediğiniz testler göndermeden önce testlerde çalıştırılır ve atest kullanılarak çağrılabilir.

TEST_MAPPING dokümanlarına bakabilirsiniz. görebilirsiniz, ancak libfoo_inline_tests örneğinde, şunu ekleyin: testinizin TreeHugger'da çalıştırılmasını sağlamak için presubmit'i gönderin:

{
  "presubmit": [
    {
      "name": "libfoo_inline_tests",
    },
  ]
}

unit_tests: false olarak ayarlanmadıkça rust_test_host modüllerinin varsayılan olarak göndermeden önce çalıştığını unutmayın. Bu nedenle, bunları TEST_MAPPING dosyalarında belirtmeniz gerekmez.

auto_gen_config ve test_suites özelliklerinin işleyiş şekli hakkında daha fazla bilgi için Ayarlar bölümüne bakın daha fazla bilgiyi Test Geliştirme İş Akışı belgesinde bulabilirsiniz.

Önemli Paslanma testi özellikleri

rust_test modülleri, İkili Modüller sayfasında açıklandığı gibi rust_binary modüllerinden özellikleri devralır.

Aşağıdaki tabloda tanımlanan özellikler, Sık kullanılan önemli özellikler geçerli olacak iki yöntem vardır. Bunlar, Rust test modülleri için özellikle önemlidir veya rust_test modülü türüne özgü benzersiz bir davranış sergiler.

  • test_harness: Gelişmiş kullanım; varsayılan olarak true değerini alır.

rust_test kendi test donanımınızı uyguluyorsa ve yerleşik Rust test donanımını kullanmanız gerekmiyorsa bu değeri false olarak ayarlayın (yani, bu değeri false olarak ayarladığınızda --test işaretçisi rustc'ye geçmez).

rust_library ile rust_test arasında yinelemelerden kaçının

İç içe yerleştirilmiş modüller aracılığıyla satır içi Rust testlerini kullandığınızda ilgili kopya Android.bp dosyanız. Sorun, bağımlılıklarını rust_library için bir kez, rust_test için bir kez olmak üzere iki kez listelemeniz gerektiğidir:

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",
    ],
}

Her rust_test modülü, ilgili rust_library modülüyle aynı bağımlılıkları listeler. Modüller arasında tutarlılık sağlamak için bağımlılıklarını bir rust_defaults modülünde yalnızca bir kez listeleyebilirsiniz:

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"],
}

Bu sayede, kitaplık ve test modülü her zaman aynı bağımlılıkları kullanır.