이 페이지는 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_config
및 test_suites
속성이 작동하는 방식에 대한 자세한 내용은 테스트 개발 워크플로 설명서의 설정 섹션을 참조하세요.
주목할만한 녹 테스트 속성
rust_test
모듈은 Binary Modules 페이지에 설명된 대로 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"],
}
이런 식으로 라이브러리와 테스트 모듈은 항상 동일한 종속성을 사용합니다.