Rust:
테스트 작성하기

어떻게:

Rust의 내장 테스트 프레임워크는 외부 라이브러리가 필요 없이 단위, 통합 및 문서 테스트를 지원합니다. 테스트는 #[test]로 주석 처리되며, 이와 같이 주석 처리된 모든 함수는 테스트로 컴파일됩니다.

단위 테스트 작성:

테스트하는 모듈 안에 tests 하위 모듈을 #[cfg(test)]로 마크하여 테스트할 때만 컴파일되도록 하여 단위 테스트를 배치합니다.

// lib.rs 또는 main.rs
pub fn add(a: i32, b: i32) -> i32 {
    a + b
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn it_adds_two() {
        assert_eq!(add(2, 2), 4);
    }
}

테스트 실행:

$ cargo test

출력:

   Compiling your_package_name v0.1.0 (/path/to/your_package)
    Finished test [unoptimized + debuginfo] target(s) in 0.00 secs
     Running unittests src/lib.rs (or src/main.rs)

running 1 test
test tests::it_adds_two ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

통합 테스트 작성:

통합 테스트는 프로젝트 최상위에 있는 src 옆에 있는 tests 디렉토리에 위치합니다. tests 내의 각 .rs 파일은 자체 별개의 크레이트로 컴파일됩니다.

// tests/integration_test.rs
use your_package_name;

#[test]
fn it_adds_two() {
    assert_eq!(your_package_name::add(2, 2), 4);
}

인기 있는 타사 라이브러리로 테스트하기:

더 광범위한 테스트 기능을 위해, proptest 라이브러리는 테스트 함수에 사용할 수 있는 다양한 입력을 생성할 수 있습니다.

Cargo.tomlproptest를 개발 의존성으로 추가합니다:

[dev-dependencies]
proptest = "1.0"

proptest를 사용하여 많은 자동 생성 입력으로 동일한 테스트를 실행합니다:

// inside tests/integration_test.rs or a module's #[cfg(test)]

use proptest::prelude::*;

proptest! {
    #[test]
    fn doesnt_crash(a: i32, b:i32) {
        your_package_name::add(a, b);
    }
}

이것은 add가 다양한 i32 입력에 대해 패닉하지 않는지 확인합니다.