[Rust 공식문서 한국어 정리] ㉕. Rust 테스트 가이드
[Rust 공식문서 한국어 정리] ㉕. Rust 테스트 가이드
원문 제목: Testing — Rust By Example
작성자: Rust By Example Contributors
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
이 문서는 Rust에서 제공하는 내장 테스트 시스템을 활용하는 방법을 체계적으로 소개합니다.
단위 테스트, 통합 테스트, 문서 테스트의 세 가지 계층을 어떻게 구성하고 실행하는지를 설명합니다.
#[test] 속성, assert! 매크로, 테스트 모듈의 위치 규칙, 그리고 cargo test의 다양한 옵션을 다룹니다.
테스트 주도 개발(TDD)과 지속적 통합(CI) 맥락에서 Rust 테스트를 효과적으로 활용하는 전략을 제시합니다.
품질 있는 코드를 작성하려는 모든 Rust 개발자에게 기본이 되는 내용입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① #[test]: 함수를 테스트로 표시하여 cargo test 시 자동으로 실행되도록 합니다.
② assert!, assert_eq!, assert_ne!: 조건과 동등성을 검증하는 표준 매크로입니다.
③ 모듈 위치: 단위 테스트는 src 내, 통합 테스트는 tests/ 디렉토리에 배치합니다.
④ 문서 테스트: ///로 시작하는 코드 블록을 자동으로 실행하여 문서의 예제가 실제로 동작함을 보장합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Rust의 테스트는 컴파일러와 빌드 시스템에 내장되어 있어 별도의 테스트 프레임워크 설치가 필요 없습니다.
#[test] 속성을 함수에 붙이면 해당 함수가 테스트 러너에 의해 실행됩니다.
테스트 함수는 panic!이 발생하지 않으면 성공, 발생하면 실패로 간주됩니다.
assert! 계열 매크로는 테스트 가독성을 높입니다.
assert_eq!(left, right)는 두 값이 같을 때 통과하고, 다륾면 diff를 출력하며 실패합니다.
assert_ne!는 반대로 두 값이 다를 때 통과합니다.
panic을 예상하는 테스트에는 #[should_panic]을 사용할 수 있습니다.
모듈 구조는 단위 테스트와 통합 테스트를 명확히 분리합니다.
src/ 디렉토리 내의 #[cfg(test)] mod tests 블록은 단위 테스트이며, 비공개 API까지 테스트할 수 있습니다.
tests/ 디렉토리의 파일은 별도의 바이너리로 컴파일되며, 공개 API만 호출하는 통합 테스트입니다.
문서 테스트는 Rust의 독특한 강점입니다.
/// 뒤에 붙은 ``` 코드 블록은 cargo test --doc으로 실행되며, 문서 예제가 항상 최신 상태임을 보장합니다.
no_run 속성은 컴파일만 검증하고 실행은 건드뛰고, ignore는 완전히 무시합니다.
테스트 필터링과 병렬 실행도 cargo test가 기본으로 지원합니다.
cargo test 패턴을 사용해 특정 테스트만 실행하고, --test-threads=1로 순차 실행할 수 있습니다.
--nocapture 옵션은 println! 출력을 보여주며, 디버깅 시 유용합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TDD 사이클에서 먼저 실패하는 테스트를 작성하고, 구현을 수정해 통과시킵니다.
CI 파이프라인에서 cargo test를 실행하고, 코드 커버리지 도구(tarpaulin 등)와 연동합니다.
문서 테스트를 적극 활용해 API 사용 예제가 항상 정확하도록 유지합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Rust의 테스트 시스템은 언어 자체에 깊이 통합되어 있어 별도 설정 없이 즉시 사용 가능합니다.
단위, 통합, 문서 테스트의 세 계층을 적절히 배치하면 견고한 회귀 방지망을 구축할 수 있습니다.
테스트는 코드 품질을 보증하는 최선의 투자이며, Rust는 이를 매우 저렴한 비용으로 제공합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/rust-by-example/testing.html
Rust Book Testing: https://doc.rust-lang.org/book/ch11-00-testing.html
#Rust #Testing #UnitTest #IntegrationTest #DocTest #TDD #번역

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30