Test modülleri

Bu sayfada, Rust test düzeneğini kullanan bir rust_test modülünün nasıl oluşturulacağı hakkında temel bilgiler verilmektedir.

Temel bir Rust testi yazma

Cihaz üzerinde ve ana makine üzerinde Rust testine dair canlı bir örnek için keystore2 Android.bp dosyasını görüntüleyin veya external/rust/crates dizinindeki birçok sandıkta bir tane bulun.

rust_test modülü, #[test] özelliğiyle işaretlenmiş kodlardan testler oluşturan rustc'nin --test işareti kullanılarak oluşturulur. Daha fazla bilgi için The Rust Reference Testing Attributes (Rust Referans Testi Özellikleri) dokümanı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 TEST_MAPPING dosyası oluşturursanız bu dosyaya eklediğiniz testler gönderme öncesi testlerde çalıştırılır ve atest kullanılarak çağrılabilir.

Daha fazla bilgi için TEST_MAPPING belgelerine göz atabilirsiniz. Ancak libfoo_inline_tests örneğinde, test çalıştırmalarınızı TreeHugger'da etkinleştirmek için bu kodu göndermeden önce ekleyin:

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

rust_test_host modüllerinin, unit_tests: false olarak ayarlanmadığı sürece varsayılan olarak ön gönderme aşamasında çalıştığını unutmayın. Bu nedenle, bunları TEST_MAPPING dosyalarında bildirmeniz gerekmez.

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

Önemli 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 ek olarak verilmiştir. Bunlar, Rust test modülleri için özellikle önemlidir veya rust_test modül türüne özgü benzersiz davranışlar sergiler.

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

rust_test kendi test düzeneğini uyguluyorsa ve yerleşik Rust test düzeneğini kullanmanız gerekmiyorsa (diğer bir deyişle, bu değeri false olarak ayarlamak --test işaretini rustc'ye geçirmez) bu değeri false olarak ayarlayın.

rust_library ve rust_test arasında yinelenmeyi önleme

Yerleşik Rust testlerini iç içe geçmiş modüller aracılığıyla kullandığınızda Android.bp dosyanızda yinelenen kodlar oluşur. Sorun, bağımlılıkları iki kez listelemeniz gerektiğidir: bir kez rust_library için, 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 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ı 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.