Modul pengujian

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

Tulis tes Rust dasar

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

Modul rust_test dibuat menggunakan flag --test dari Rustc, yang membuat pengujian dari kode yang ditandai dengan atribut #[test] . Untuk informasi lebih lanjut, 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 tes. Meskipun ini bukan keharusan, jika Anda membuat file TEST_MAPPING, pengujian yang Anda sertakan di dalamnya akan dijalankan dalam pengujian pra-pengiriman, dan dapat dipanggil menggunakan atest .

Anda dapat mereferensikan dokumentasi TEST_MAPPING untuk informasi lebih lanjut, namun untuk contoh libfoo_inline_tests , tambahkan ini ke prapengiriman untuk mengaktifkan pengujian Anda berjalan di TreeHugger:

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

Perhatikan bahwa modul rust_test_host dijalankan secara default di presubmit kecuali unit_tests: disetel ke false , jadi Anda tidak perlu mendeklarasikannya di file TEST_MAPPING .

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

Properti uji karat yang terkenal

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

Properti yang ditentukan dalam tabel di bawah ini merupakan tambahan dari properti umum Penting yang berlaku untuk semua modul. Ini sangat penting untuk modul pengujian Rust, atau menunjukkan perilaku unik yang spesifik untuk tipe modul rust_test .

  • test_harness : Penggunaan lanjutan, defaultnya adalah true.

Setel ini ke false jika rust_test Anda mengimplementasikan test harnessnya sendiri dan Anda tidak perlu menggunakan Rust test harness yang ada di dalamnya (dengan kata lain, menyetel ini ke false tidak akan meneruskan tanda --test ke Rustc).

Hindari duplikasi antara Rust_library dan Rust_test

Saat Anda menggunakan pengujian Rust sebaris melalui modul bersarang, Anda akan mendapatkan duplikasi di file Android.bp Anda. Masalahnya adalah Anda harus membuat daftar 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 pada akhirnya akan mencantumkan dependensi yang sama dengan modul rust_library yang sesuai. Untuk memastikan konsistensi antar modul, Anda dapat membuat daftar dependensi sekali saja 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, perpustakaan dan modul pengujian akan selalu menggunakan dependensi yang sama.