이 페이지에서는 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_config
및 test_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_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"],
}
이렇게 하면, 라이브러리와 테스트 모듈이 항상 동일한 종속 항목을 사용합니다.