19.2 Testing
함수들은 다음 attributes 들을 통해 테스트 할 수 있다:
#[test]
는 함수를 유닛 테스트로 지정한다. 함수는 반드시 인자와 반환 값이 없어야 한다.#[should_panic]
는 함수를 패닉 테스트로 지정한다.
// unit_test.rs
// 테스트 모음이 실행되지 *않을* 때만 `main`을 조건부로 컴파일한다.
#[cfg(not(test))]
fn main() {
println!("If you see this, the tests were not compiled nor ran!");
}
// 테스트-항목이 구동 됐을 때만 모듈 `test`를 컴파일 하는 조건.
#[cfg(test)]
mod test {
// `distance_test` 헬퍼 함수가 필요할 것.
fn distance(a: (f32, f32), b: (f32, f32)) -> f32 {
(
(b.0 - a.0).powi(2) +
(b.1 - a.1).powi(2)
).sqrt()
}
#[test]
fn distance_test() {
assert!(distance((0f32, 0f32), (1f32, 1f32)) == (2f32).sqrt());
}
#[test]
#[should_panic]
fn failing_test() {
assert!(1i32 == 2i32);
}
}
테스트는 cargo test
나 rustc --test
로 구동할 수 있다.
$ rustc --test unit_test.rs
$ ./unit_test
running 2 tests
test test::distance_test ... ok
test test::failing_test ... ok
test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured
만약 --test
가 포함되지 않으면, 이렇게 될 것이다.
$ rustc unit_test.rs
$ ./unit_test
If you see this, the tests were not compiled nor ran!
See also:
attributes, conditional compilation, and mod
.