Rust - Basic - 11 - Test
Test
整体来说,Rust 提供的功能比较简单,但也足够全面,适合 Test-Driven 的开发模式。可惜笔者工作的地方,大多数的版本迭代人力过于紧张、需求过于繁多,Test-Driven 的开发模式并不适合。等到有测试时间的时候,之后再补各种单元测试、集成测试,就很麻烦了。
Comprehension
基础写法
pub fn greeting(name: &str) -> String { String::from("Hello!") } pub struct Guess { value: i32, } impl Guess { pub fn new(value: i32) -> Guess { if value < 1 || value > 100 { panic!("Guess value must be between 1 and 100, got {}.", value); } Guess { value } } } #[cfg(test)] mod tests { use super::*; #[test] fn it_works() { // 也有 assert_ne! 可以使用 assert_eq!(2 + 2, 4); } #[test] fn will_fail() { panic!("Make this test fail"); } #[test] fn greeting_contains_name() { let result = greeting("Carol"); // assert 时如果不符合预期,可以 print hint assert!( result.contains("Carol"), "Greeting did not contain name, value was `{}`", result ); } #[test] #[should_panic] // should_panic 用于检测是否 panic fn greater_than_100() { Guess::new(200); } } #[cfg(test)] mod tests2 { #[test] // 使用 Result<T, E> 作为返回值,无法使用 should_panic trait fn it_works() -> Result<(), String> { if 2 + 2 == 4 { Ok(()) } else { Err(String::from("two plus two does not equal four")) } } }