Moduły testowe

Na tej stronie znajdziesz podstawowe informacje o tworzeniu modułu rust_test który używa jarzma testowego Rust.

Pisanie podstawowego testu Rust

Aby zobaczyć przykład testu Rust na urządzeniu i hosta, wyświetl keystore2 Android.bp lub znajdź jedną ze skrzyń w katalogu external/rust/crates.

Moduł rust_test wykorzystuje flagę Rustc --test, która tworzy testy. z kodu oznaczonego atrybutem #[test]. Więcej informacji: Atrybuty Rust Reference Testing dokumentacji.

Zdefiniuj moduł testowy w ten sposób:

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

Plik TEST_MAPPING zawiera listę testów. Chociaż nie jest to wymogiem, jeśli utworzysz plik TEST_MAPPING, uwzględnione w nim testy zostaną uruchomione testów wstępnego przesyłania i może być wywoływany za pomocą metody atest.

Zapoznaj się z dokumentacją TEST_MAPPING , ale w przykładzie libfoo_inline_tests dodaj go do przed przesłaniem, aby umożliwić uruchomienia testów w TreeHugger:

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

Pamiętaj, że moduły rust_test_host są domyślnie uruchamiane podczas przesyłania przed przesłaniem, chyba że Parametr unit_tests: ma wartość false, więc nie musisz ich deklarować w TEST_MAPPING plikach.

Więcej informacji o działaniu właściwości auto_gen_config i test_suites znajdziesz Więcej informacji znajdziesz w sekcji Ustawienia dokumentacji procesu opracowywania testów.

Ważne właściwości testowe Rust

Moduły rust_test dziedziczą właściwości z modułów rust_binary, jak opisano na stronie moduły binarne stronę.

Właściwości zdefiniowane w tabeli poniżej są uzupełnieniem Ważne właściwości który dotyczy wszystkich modułów. Są one szczególnie ważne z punktu widzenia modułów testowych lub zachowania charakterystyczne dla typu modułu rust_test.

  • test_harness: użycie zaawansowane. Wartość domyślna to true (prawda).

Ustaw tę wartość na „false”, jeśli rust_test używa własnej jarzma testowej, a Ty jej nie używasz Konieczność użycia wbudowanej jarzma testowego Rust (czyli ustawienie wartości false) nie przekazuje flagi --test do rustc).

Unikaj powielania elementów rust_library i rust_test

Używanie wbudowanych testów Rust za pomocą zagnieżdżonych modułów powoduje duplikowanie w pliku Android.bp. Problem polega na tym, że trzeba podać listę zależności, dwa razy, raz dla zmiennej rust_library i drugi raz dla 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",
    ],
}

Każdy moduł rust_test będzie zawierał te same zależności co moduł odpowiadającym modułowi rust_library. Aby zapewnić spójność między modułami, możesz wyświetlić zależności tylko raz w module 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"],
}

Dzięki temu biblioteka i moduł testowy zawsze korzystają z tych samych zależności.