Testing in Android
Building on Testing, we will now look at how unit tests work in AOSP. Use the rust_test module for your unit tests:
testing/Android.bp:
rust_library {name: "libleftpad",crate_name: "leftpad",srcs: ["src/lib.rs"],}rust_test {name: "libleftpad_test",crate_name: "leftpad_test",srcs: ["src/lib.rs"],host_supported: true,test_suites: ["general-tests"],}
testing/src/lib.rs:
#![allow(unused)]fn main() {//! Left-padding library./// Left-pad `s` to `width`.pub fn leftpad(s: &str, width: usize) -> String {format!("{s:>width$}")}#[cfg(test)]mod tests {use super::*;#[test]fn short_string() {assert_eq!(leftpad("foo", 5), " foo");}#[test]fn long_string() {assert_eq!(leftpad("foobar", 6), "foobar");}}}
You can now run the test with
atest --host libleftpad_test
The output looks like this:
INFO: Elapsed time: 2.666s, Critical Path: 2.40sINFO: 3 processes: 2 internal, 1 linux-sandbox.INFO: Build completed successfully, 3 total actions//comprehensive-rust-android/testing:libleftpad_test_host PASSED in 2.3sPASSED libleftpad_test.tests::long_string (0.0s)PASSED libleftpad_test.tests::short_string (0.0s)Test cases: finished with 2 passing and 0 failing out of 2 test cases
Notice how you only mention the root of the library crate. Tests are found recursively in nested modules.