Rust - Basic - 11 - Тестирование

Тесты

В целом 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"))
            }
        }
    }
    

Источник

https://doc.rust-lang.org/book/ch11-00-testing.html