728x90
이제 나도 TDD 가능?
1. 테스트
코드가 의도대로 수행되는지 검증하는 것.
테스트 함수에 필요한 것
- 데이터 및 상태 설정
- 테스트 코드 실행
- 결과 비교
함수의 fn 이전 줄에 #[test] 를 추가하면 테스트함수로 사용할 수 있음.
- cargo test 명령어로 실행할 수 있음.
- 특정 인스턴스에서는 실행되지 않도록 할 수 있음.
- cargo test에 인수를 넘겨서 이름이 일치하는 테스트만 실행 하도록 할수 있음(필터링)
- Doc-tests ~~ : API 문서에 작성해 놓은 예제코드도 테스트 할 수 있음
결과 검사
- assert!
- true 인 경우 pass
- false 인 경우 panic! 발생
- assert_eq!
- assert_ne!
- should_panic: 에러조건 처리하는지 확인
- 내부에서 패닉이 발생해야 통과됨
- 함수이름 위에 #[should_panic] 추가
- Result<T, E>
- should_panic 어노테이션 사용 불가능
2. 테스트 실행방법 제어
cargo test로 생성된 바이너리는 모든 테스트를 병렬로 실행하고 테스트가 수행되는 동안 발생된 출력을 캡처한다.
- 명령어 옵션을 통해서 바꿀수 있음
- cargo test <args_for_cargo_test> -- <args_for_test_binary>
cargo test -- --test-threads=1
- 기본 테스트는 병렬 수행임. 공유 상태를 가지면 안됨.
- 사용할 스레드를 1로 조절하면 병렬로 처리하지 않으므로 순차적으로 테스트를 진행함.
cargo test -- --show-output
- 기본 테스트는 발생된 출력을 보여주지 않음.
- 해당 옵션을 사용해서 출력을 보여줄수 있음
cargo test (<func_name> or <filter_word>)
- 특정 함수 하나만 테스트 실행할수 있음.
- 공통적으로 포함된 단어로 테스트 함수를 필터링할 수 있음
cargo test -- --ignored
- 제외된 테스트만 실행할수 있음
- cargo test -- --include-ignored 로 모든 테스트를 진행할수있음
- #[ignore] 를 함수에 붙여서 기본 테스트에서 제외시킬수 있음
3. 테스트 조직화
유닛테스트(단위테스트): 한 모듈만 테스트
- 테스트 코드가 실제 코드와 같이 있음
- #[cfg(test)]를 사용해서 컴파일 소요시간을 줄일수 있음(줄여야 함)
러스트에선 비공개 함수도 테스트할수 있음
- 다른 언어에서는 비공개 함수를 테스트하기 어렵거나 불가능함.
통합테스트: 모든 기능 테스트
- 테스트 코드가 분리되어있음. tests 디렉토리 필요함. #[cfg(test)] 가 필요없음
- 공개 API만 호출 가능.
https://doc.rust-kr.org/ch11-00-testing.html
'STUDY > Rust' 카테고리의 다른 글
Rust - 15. 클로저 (0) | 2024.03.11 |
---|---|
Rust - 14. I/O 프로젝트 CLI 프로그램 만들기 (0) | 2024.03.11 |
Rust - 12. 라이프 타임 (1) | 2024.03.05 |
Rust - 11. 제네릭 타입, 트레이트 (0) | 2024.03.04 |
Rust - 10. 에러 처리 (0) | 2024.02.26 |