[Rust] 테스트
Updated:
개요
- test 속성을 어노테이션하는 함수
- 매크로
assert!
- true이면 통과 아니면 패닉 발생
assert_eq!
- 같으면 통과 아니면 패닉 발생
assert_ne!
- 다르면 통과 아니면 패닉 발생
- 속성
should_panic
- 패닉이 발생하면 통과 아니면 실패
- expected 파라미터를 통해 특정 패닉 메세지를 지닌 패닉 테스트 가능
ignore
- 테스트 배제
- 커스텀 실패 메세지
assert!
,assert_eq!
,assert_ne!
의 추가 인자 전달 가능
- cargo test 플래그
--test-threads
- 테스트 스레드 개수 조정
--nocapture
- 출력 캡처 동작 비활성화
- 성공한 테스트의 출력 메세지도 출력
--ignored
- ignored만 테스트
cargo test xxx
- xxx 테스트만 테스트
단위 테스트(unit test)
- 한 번에 하나의 모듈만 분리하여 테스트
- 각 코드의 단위를 나머지 부분과 분리하여 테스트하는 것이 목적
- 비공개 인터페이스(private interface)를 테스트
- src 디렉토리 내에 위치
- 각 파일마다 cfg(test)를 어노테이션하며 테스트 함수를 담고 있는 tests라는 이름의 모듈을 생성
#[cfg(test)]
어노테이션cargo test
를 수행할 때에만 컴파일하고 실행- 코드와 테스트 코드가 동일한 파일에 존재하므로 빌드 시에는 포함시키지 않기 위함
- 통합 테스트는 라이브러리 외부에 위치하기 때문에 해당 주석이 필요하지 않음
통합 테스트(integration test)
- 외부에서 공개 인터페이스(public interface)를 테스트
- 프로젝트 최상위 디렉토리(src와 같은 레벨)에 tests 디렉토리에 위치
- 각각의 파일들을 개별적인 크레이트처럼 컴파일
- 공통 코드
tests/common/mod.rs
에 구현- 그래야 테스트 출력에 나타나지 않음
- 바이너리 크레이트를 위한 통합 테스트
src/main.rs
에 정의한 함수를 가져올 수 없음src/lib.rs
에 대부분 구현 후 테스트 코드 작성src/main.rs
에는 테스트할 필요 없을 정도의 소량의 코드(src/lib.rs
의 로직을 호출하는)만 구현