How to Write Tests

  • Rust의 테스트 코드는 #[test] 주석이 달린 함수
    • 함수를 테스트 함수로 바꾸려면 함수 선언 전에 #[test] 주석을 추가하면 됨
  • #[cfg(test)]를 모듈 선언 전에 추가하면 cargo build에서 제외됨
#[cfg(test)]
mod tests {
    #[test]
    fn it_works() {
        let result = 2 + 2;
        assert_eq!(result, 4);
    }
}

Assert

  • assert!는 boolean 결과를 검증하기 위해 사용
assert!(larger.can_hold(&smaller));
  • assert_eq!는 두 결과가 같은지 검증
assert_eq!(4, add_two(2));
  • format
assert!(
    result.contains("Carol"),
    "Greeting did not contain name, value was `{}`",
    result
);

Panic

  • should_panic은 panic 발생을 검증
#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    #[should_panic]
    fn greater_than_100() {
        Guess::new(200);
    }

    #[test]
    #[should_panic(expected = "less than or equal to 100")]
    fn greater_than_100() {
        Guess::new(200);
    }
}

Testing Private Functions

pub fn add_two(a: i32) -> i32 {
    internal_adder(a, 2)
}

fn internal_adder(a: i32, b: i32) -> i32 {
    a + b
}

#[cfg(test)]
mod tests {
    use super::*; # 이 트릭(?)을 통해 private 함수에 접근

    #[test]
    fn internal() {
        assert_eq!(4, internal_adder(2, 2));
    }
}