테스트 모듈

이 페이지는 Rust 테스트 하네스를 사용하는 rust_test 모듈을 빌드하는 방법에 대한 기본 정보를 제공합니다.

기본적인 Rust 테스트 작성하기

온-디바이스 및 온-호스트 Rust 테스트의 라이브 예제를 보려면 keystore2 Android.bp 를 보거나 external/rust/crates 디렉토리의 여러 크레이트에서 하나를 찾으세요.

rust_test 모듈은 #[test] 속성으로 표시된 코드에서 테스트를 생성하는 rustc의 --test 플래그를 사용하여 빌드합니다. 자세한 내용 은 Rust Reference Testing Attributes 문서를 참조하십시오.

다음과 같이 테스트 모듈을 정의합니다.

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 파일에는 테스트 목록이 포함되어 있습니다. 요구 사항은 아니지만 TEST_MAPPING 파일을 만들면 여기에 포함된 테스트가 사전 제출 테스트에서 실행되고 atest 를 사용하여 호출할 수 있습니다.

자세한 내용은 TEST_MAPPING 문서 를 참조할 수 있지만 libfoo_inline_tests 예제의 경우 이를 사전 제출에 추가하여 TreeHugger에서 테스트를 실행할 수 있도록 합니다.

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

unit_tests:false 로 설정되지 않는 한 rust_test_host 모듈은 기본적으로 사전 제출에서 실행되므로 TEST_MAPPING 파일에서 이를 선언할 필요가 없습니다.

auto_gen_configtest_suites 속성이 작동하는 방식에 대한 자세한 내용은 테스트 개발 워크플로 설명서의 설정 섹션을 참조하세요.

주목할만한 녹 테스트 속성

rust_test 모듈은 Binary Modules 페이지에 설명된 대로 rust_binary 모듈의 속성을 상속합니다.

아래 표에 정의된 속성은 모든 모듈에 적용되는 중요 공통 속성 에 추가됩니다. 이것들은 Rust 테스트 모듈에 특히 중요하거나 rust_test 모듈 유형에 고유한 동작을 나타냅니다.

  • test_harness : 고급 사용법, 기본값은 true입니다.

rust_test 가 자체 테스트 하네스를 구현하고 내장된 Rust 테스트 하네스를 사용할 필요가 없으면 이것을 false로 설정하십시오(즉, 이것을 false로 설정하면 rustc에 --test 플래그를 전달 하지 않습니다 ).

rust_libraryrust_test 간의 중복 방지

중첩 모듈을 통해 인라인 Rust 테스트를 사용하면 Android.bp 파일이 중복됩니다. 문제는 종속성을 두 번 나열해야 한다는 것입니다. 한 번은 rust_library 에 대해, 한 번은 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",
    ],
}

rust_test 모듈은 해당 rust_library 모듈과 동일한 종속성을 나열합니다. 모듈 간의 일관성을 보장하기 위해 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"],
}

이런 식으로 라이브러리와 테스트 모듈은 항상 동일한 종속성을 사용합니다.