테스트는 언어랑 Cargo 에 내장돼 있어 — 설치할 프레임워크도, 쓸 설정도 없어. cargo test 가 그냥 돌고, Rust 는 기본으로 세 종류 테스트를 지원해.
단위 테스트
단위 테스트는 테스트하는 코드랑 같은 파일 에, #[cfg(test)] mod tests 블록에 살아. #[test] 표시된 함수가 cargo test 로 돌아. 모듈 안에 있어서 private 함수를 테스트할 수 있어 — 많은 언어가 못 맞추는 의도적 Rust 선택. 검사엔 assert!, assert_eq! 같은 걸 써.
통합 테스트
통합 테스트는 최상위 tests/ 디렉토리에 살고, 각 파일이 네 라이브러리를 공개 API 로만 쓰는 별도 크레이트야 — 진짜 소비자처럼. 네 크레이트가 밖에서 작동하는지 검증해. 분리는 의도적이야: 단위 테스트는 내부를, 통합 테스트는 계약을 검사.
테스트는 일급이지 덧붙인 게 아니야.
#[test], cargo test, #[cfg(test)] 가 언어랑 툴링 기능이야 — 서드파티 프레임워크도, 셋업도 없어. 그 낮은 마찰이 관용적 Rust 가 많이 테스트되는 이유야: 테스트 작성이 테스트 자체 외엔 비용이 0 이면, 더 많이 써.Doctest
세 번째 종류가 독특하게 Rust 야: /// 문서 주석의 코드 예제가 테스트로 컴파일되고 실행 돼. 틀린 예제가 cargo test 를 실패시키니, 문서가 코드와 어긋날 수 없어. stale 문서의 해독제야 — 예제가 매 실행마다 테스트되니까 작동이 보장돼.