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 testi için canlı bir örnek görmek isterseniz keystore2 Android.bp dosyasını görüntüleyin veya external/rust/crates dizinindeki paketlerin çoğunda bir tane bulun.

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

Şu durumlar hariç olmak üzere, rust_test_host modülün varsayılan olarak gönderim öncesi aşamada çalıştığını unutmayın. unit_tests:, false olarak ayarlandığından bunları belirtmeniz gerekmez TEST_MAPPING dosyada.

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 şurada açıklandığı gibi rust_binary modülden özellikleri devralır: İkili Modüller sayfasını ziyaret edin.

Aşağıdaki tabloda tanımlanan özellikler, tüm modüller için geçerli olan önemli ortak özelliklere ek olarak verilmiştir. Bunlar Rust için özellikle önemli. veya rust_test modül türüne özgü benzersiz davranışlar sergileyebilir.

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

rust_test cihazınız kendi test bandını uyguluyorsa ve siz bu seçeneği belirlemezseniz bu değeri false (yanlış) olarak ayarlayın. dahili Rust test kayışını kullanmanız gerekir (yani bunu false olarak ayarlamanız gerekir) --test işaretini rustc'a iletmez.

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

Böylece kitaplık ve test modülü daima aynı bağımlılıkları kullanır.