Test modülleri

Bu sayfada Rust test donanımını kullanan bir rust_test modülünün nasıl oluşturulacağı hakkında temel bilgiler verilmektedir.

Temel bir Rust testi yazın

Cihaz içi ve ana bilgisayardaki Rust testinin canlı bir örneği için keystore2 Android.bp dosyasını görüntüleyin veya external/rust/crates dizinindeki birçok kasadan birini bulun.

Bir rust_test modülü, #[test] özelliğiyle işaretlenmiş koddan testler oluşturan Rusc'ın --test bayrağını kullanarak oluşturulur. Daha fazla bilgi için Rust Referans Testi Nitelikleri belgelerine bakın.

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

Bir TEST_MAPPING dosyası testlerin bir listesini içerir. Bir gereklilik olmasa da, bir TEST_MAPPING dosyası oluşturursanız, içine dahil ettiğiniz testler gönderim öncesi testlerde çalıştırılır ve atest kullanılarak çağrılabilir.

Daha fazla bilgi için TEST_MAPPING belgelerine başvurabilirsiniz, ancak libfoo_inline_tests örneği için, TreeHugger'da test çalıştırmalarınızı etkinleştirmek üzere bunu ön gönderime ekleyin:

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

unit_tests: false olarak ayarlanmadığı sürece, rust_test_host modüllerinin varsayılan olarak ön gönderimde çalıştığını unutmayın, dolayısıyla bunları TEST_MAPPING dosyalarında bildirmenize gerek yoktur.

auto_gen_config ve test_suites özelliklerinin nasıl çalıştığı hakkında daha fazla bilgi için Test Geliştirme İş Akışı belgelerinin Ayarlar bölümüne bakın.

Önemli Rust testi özellikleri

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

Aşağıdaki tabloda tanımlanan özellikler, tüm modüller için geçerli olan Önemli ortak özelliklere ek olarak verilmiştir. Bunlar ya Rust test modülleri için özellikle önemlidir ya da rust_test modül tipine özgü benzersiz davranışlar sergiler.

  • test_harness : Gelişmiş kullanım, varsayılan olarak true'dur.

rust_test kendi test donanımını uyguluyorsa ve yerleşik Rust test donanımını kullanmanıza gerek yoksa bunu false olarak ayarlayın (başka bir deyişle, bunu false olarak ayarlamak --test bayrağını Rusc'a iletmeyecektir ).

Rust_library ve Rust_test arasındaki kopyalardan kaçının

İç içe geçmiş modüller aracılığıyla satır içi Rust testlerini kullandığınızda, Android.bp dosyanızda çoğaltmayla karşılaşırsınız. Sorun şu ki, bağımlılıkları iki kez listelemeniz gerekiyor; bir kez rust_library için ve bir kez de rust_test için:

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 bir rust_test modülü, karşılık gelen rust_library modülüyle aynı bağımlılıkları listeleyecektir. Modüller arasında tutarlılığı sağlamak için bağımlılıkları 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 şekilde kütüphane ve test modülü her zaman aynı bağımlılıkları kullanacaktır.