Modul pengujian

Halaman ini memberikan informasi dasar tentang cara membuat modul rust_test yang menggunakan test harness Rust.

Menulis pengujian Rust dasar

Untuk contoh langsung pengujian Rust di perangkat dan di host, lihat keystore2 Android.bp, atau temukan salah satu dari banyak crate di direktori external/rust/crates.

Modul rust_test dibuat menggunakan flag --test rustc, yang membuat pengujian dari kode yang ditandai dengan atribut #[test]. Untuk mengetahui informasi selengkapnya, lihat dokumentasi Atribut Pengujian Referensi Rust.

Tentukan modul pengujian sebagai berikut:

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

File TEST_MAPPING berisi daftar pengujian. Meskipun bukan persyaratan, jika Anda membuat file TEST_MAPPING, pengujian yang disertakan di dalamnya akan berjalan dalam pengujian pra-commit, dan dapat dipanggil menggunakan atest.

Anda dapat melihat dokumentasi TEST_MAPPING untuk mengetahui informasi selengkapnya, tetapi untuk contoh libfoo_inline_tests tambahkan ini ke pra-commit untuk mengaktifkan pengujian di TreeHugger:

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

Perhatikan bahwa modul rust_test_host berjalan secara default dalam pra-commit kecuali jika unit_tests: ditetapkan ke false, sehingga Anda tidak perlu mendeklarasikannya dalam file TEST_MAPPING.

Untuk mengetahui informasi selengkapnya tentang cara kerja properti auto_gen_config dan test_suites, lihat bagian Setelan dalam dokumentasi Alur Kerja Pengembangan Pengujian.

Properti pengujian Rust penting

Modul rust_test mewarisi properti dari modul rust_binary seperti yang dijelaskan di halaman Modul Biner.

Properti yang ditentukan dalam tabel di bawah ini adalah tambahan dari Properti umum penting yang berlaku untuk semua modul. Properti ini sangat penting untuk modul pengujian Rust, atau menunjukkan perilaku unik yang khusus untuk jenis modul rust_test.

  • test_harness: Penggunaan lanjutan, defaultnya adalah benar.

Tetapkan nilai ini ke salah jika rust_test Anda menerapkan test harness sendiri dan Anda tidak perlu menggunakan test harness Rust bawaan (dengan kata lain, menetapkan nilai ini ke salah tidak akan meneruskan flag --test ke rustc).

Menghindari duplikasi antara rust_library dan rust_test

Saat Anda menggunakan pengujian Rust inline melalui modul bertingkat, Anda akan mengalami duplikasi dalam file Android.bp. Masalahnya adalah Anda harus mencantumkan dependensi dua kali, sekali untuk rust_library dan sekali untuk rust_test:

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

Setiap modul rust_test akan mencantumkan dependensi yang sama dengan modul rust_library yang sesuai. Untuk memastikan konsistensi antar-modul, Anda dapat mencantumkan dependensi hanya sekali dalam modul rust_defaults:

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

Dengan cara ini, library dan modul pengujian akan selalu menggunakan dependensi yang sama.