Test modülleri

Bu sayfada Rust test bandını kullanan bir rust_test modülünün nasıl oluşturulacağıyla ilgili temel bilgiler verilmektedir.

Temel bir Rust 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ü, rustc'nin --test işaretçisini kullanarak derlenir. Bu işaretçi, #[test] özelliğiyle işaretlenmiş koddan testler oluşturur. Daha fazla bilgi için Rust Referans Test Özellikleri dokümanlarına bakın.

Test modülünü aşağıdaki gibi 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.

Daha fazla bilgi için TEST_MAPPING dokümanlarına başvurabilirsiniz, ancak libfoo_inline_tests örneğinde, testinizin TreeHugger'da çalıştırılmasını sağlamak için bunu ön gönderime ekleyin:

{
  "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 Test Geliştirme İş Akışı dokümanının Ayarlar bölümüne bakın.

Öne çıkan Rust test ö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, tüm modüller için geçerli olan Önemli ortak özelliklere ektir. Bunlar ya Rust test modülleri için özellikle önemlidir ya da rust_test modül türüne özgü benzersiz davranışlar sergiler.

  • test_harness: Gelişmiş kullanım, varsayılan olarak doğrudur.

rust_test cihazınız kendi test bandını uyguluyorsa ve yerleşik Paslanma testi bandını kullanmanız gerekmiyorsa bunu false (yanlış) olarak ayarlayın. Diğer bir deyişle, bu ayarı false (yanlış) olarak ayarlamak --test işaretini rustc'a geçirmez.

rust_library ve rust_test arasında yinelemeden kaçının

İç içe yerleştirilmiş modüller aracılığıyla satır içi Rust testleri kullandığınızda Android.bp dosyanızda yineleme oluşur. Sorun şu ki bağımlılıkları rust_library ve rust_test için bir kez olmak üzere iki kez listelemeniz gerekiyor:

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ü, karşılık gelen 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.