Тесты
В целом Rust даёт довольно простой, но достаточно полный набор возможностей — он подходит для Test-Driven разработки. Жаль, что там, где я работаю, в большинстве итераций людей слишком мало, а требований слишком много, поэтому Test-Driven подход не подходит. А когда появляется время на тесты, дописывать потом разные unit- и integration-тесты очень хлопотно.
Кратко
базовый синтаксис
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 можно вывести подсказку, если ожидание не совпало 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")) } } }