테스트 모듈

이 페이지에서는 Rust 테스트 하네스를 사용하는 rust_test 모듈을 빌드하는 기본적인 방법을 설명합니다.

기본 Rust 테스트 작성

온디바이스 및 온호스트 Rust 테스트의 실제 예를 보려면 keystore2 Android.bp를 참고하거나 external/rust/crates 디렉터리의 여러 크레이트 중 하나를 살펴보세요.

rust_test 모듈은 #[test] 속성이 표시된 코드를 바탕으로 테스트를 만드는 rustc의 --test 플래그를 사용하여 빌드합니다. 자세한 내용은 Rust 참조 테스트 속성 문서를 참고하세요.

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

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 파일을 반드시 만들어야 하는 것은 아니지만, TEST_MAPPING 파일을 만드는 경우에는 여기에 포함하는 테스트가 presubmit 테스트에서 실행되며 atest를 사용하여 호출할 수 있습니다.

자세한 내용은 TEST_MAPPING 문서를 참고하세요. libfoo_inline_tests 예의 경우에는 테스트가 TreeHugger에서 실행될 수 있도록 다음을 presubmit에 추가하세요.

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

rust_test_host 모듈은 unit_tests:false로 설정하지 않은 경우 기본적으로 presubmit에서 실행되므로 TEST_MAPPING 파일에서 선언할 필요가 없습니다.

auto_gen_configtest_suites 속성에 대해 자세히 알아보려면 테스트 개발 워크플로 문서의 설정 섹션을 참고하세요.

주목할 만한 Rust 테스트 속성

rust_test 모듈은 바이너리 모듈 페이지에서 설명하는 대로 rust_binary 모듈에서 속성을 상속받습니다.

모든 모듈에 적용되는 주요 공통 속성 외에도 아래 표에 정의된 속성이 있습니다. 이들은 Rust 테스트 모듈에서 특히 중요한 속성이거나 rust_test 모듈 유형의 고유한 동작을 나타내는 속성입니다.

  • test_harness: 고급 사용을 위한 용도, 기본값은 true.

rust_test가 자체 테스트 하네스를 구현하며 내장된 Rust 테스트 하네스를 사용할 필요가 없는 경우 이 속성을 false로 설정하세요(즉, 이 속성을 false로 설정하면 rustc로 --test 플래그가 전달되지 않음).

rust_library 및 rust_test 간 중복 방지

중첩된 모듈을 통해 인라인 Rust 테스트를 사용하면 Android.bp 파일에 중복이 발생합니다. 문제는 rust_libraryrust_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"],
}

이렇게 하면, 라이브러리와 테스트 모듈이 항상 동일한 종속 항목을 사용합니다.