STUDY/Rust

Rust - 13. 자동화 테스트

sinawi95 2024. 3. 7. 21:18
728x90

이제 나도 TDD 가능?


1. 테스트

코드가 의도대로 수행되는지 검증하는 것.

테스트 함수에 필요한 것

  1. 데이터 및 상태 설정
  2. 테스트 코드 실행
  3. 결과 비교

 

함수의 fn 이전 줄에 #[test] 를 추가하면 테스트함수로 사용할 수 있음.

  • cargo test 명령어로 실행할 수 있음. 
  • 특정 인스턴스에서는 실행되지 않도록 할 수 있음.
  • cargo test에 인수를 넘겨서 이름이 일치하는 테스트만 실행 하도록 할수 있음(필터링)
  • Doc-tests ~~ : API 문서에 작성해 놓은 예제코드도 테스트 할 수 있음

결과 검사

  1. assert! 
    • true 인 경우 pass
    • false 인 경우 panic! 발생
  2. assert_eq!
  3. assert_ne! 
  4. should_panic: 에러조건 처리하는지 확인
    • 내부에서 패닉이 발생해야 통과됨
    • 함수이름 위에  #[should_panic] 추가
  5. 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