[rust] 테스트 코드 작성 및 테스트 커버리지 비교

Rust는 안전하고 성능이 좋은 시스템 프로그래밍 언어로 많은 개발자들에게 사랑받고 있습니다. Rust로 코드를 작성할 때 테스트 코드를 작성하고 테스트 커버리지를 비교하는 것은 그 중요성을 절대적으로 간과해서는 안됩니다. 이번 글에서는 Rust로 테스트 코드를 작성하고 테스트 커버리지를 비교하는 방법에 대해 알아보겠습니다.

Rust 테스트 코드 작성

Rust에서는 단위 테스트, 속성 기반 테스트, 통합 테스트 등 다양한 종류의 테스트를 지원합니다. 이 중에서 단위 테스트를 작성하는 방법을 살펴보겠습니다.

// 소스 코드 파일: src/lib.rs

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

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

    #[test]
    fn test_add() {
        assert_eq!(add(2, 3), 5);
        assert_eq!(add(-1, 1), 0);
        assert_eq!(add(0, 0), 0);
    }
}

위의 예제 코드에서는 add 함수에 대한 단위 테스트를 작성한 것입니다. cargo test 명령을 통해 이 테스트를 실행할 수 있습니다.

테스트 커버리지 비교

테스트 커버리지는 테스트 코드가 소스 코드의 어느 정도를 커버하는지를 나타내는 지표입니다. Rust에서는 grcov를 사용하여 테스트 커버리지를 측정할 수 있습니다.

먼저 grcov를 설치합니다.

cargo install grcov

그 다음, 테스트 코드를 포함하는 빌드를 수행합니다.

RUSTFLAGS="-Zprofile -Ccodegen-units=1 -Copt-level=0 -Clink-dead-code" cargo +nightly build --tests

테스트를 실행합니다.

RUSTDOCFLAGS="-Zprofile" cargo +nightly test

cargo +nightly clean
grcov ./target/debug -s . -t html --llvm --branch --ignore-not-existing -o ./target/debug/coverage

이제 target/debug/coverage/index.html 파일을 열어 테스트 커버리지 보고서를 확인할 수 있습니다.

이렇게 테스트 코드를 작성하고 테스트 커버리지를 비교함으로써 Rust 프로젝트의 코드 품질을 높일 수 있습니다.

참고 자료: Rust 테스트, grcov GitHub 레포지토리

이상으로 Rust 테스트 코드 작성 및 테스트 커버리지 비교에 대한 글을 마치겠습니다. 부가적인 내용이 필요하거나 다른 주제에 대해 궁금한 점이 있으시면 언제든지 물어봐 주세요.