Rust 테스트 커버리지
나는 테스트를 작성하고 커버리지를 높이는 것을 좋아한다. 커버리지 리포트를 보며 테스트 커버리지 수치가 높아지면 기분이 좋다. 붉은 색으로 표시되었던 부분이 초록색으로 바뀌는 것을 보면 묘한 만족감이 든다.
예전에는 Rust에서 테스트 커버리지를 보려면
tarpaulin을 썼는데, 요즘에는
cargo-llvm-cov가 대세인
듯 하다. 두 프로젝트의 깃헙 저장소를 확인해보면 cargo-llvm-cov쪽이
더 활발하게 업데이트되고 있다.
구글 제미니도 cargo-llvm-cov를 권장한다. 커버리지 리포트도
cargo-llvm-cov로 생성한 쪽이 훨씬 낫다.
설치 및 실행
다음 명령으로 cargo-llvm-cov를 간단히 설치할 수 있다.
cargo install cargo-llvm-cov
이제 다음 명령으로 커버리지 리포트를 생성할 수 있다.
cargo llvm-cov
위 명령은 테스트를 실행하고 커버리지 요약 정보를 콘솔에
표시한다. --open 옵션을 주면 커버리지 리포트를 HTML로 생성한 후
브라우저로 열어준다.
브랜치 커버리지를 보려면 --branch 옵션을 추가해야 한다. --branch는
unstable하므로 Niglty 툴체인을 사용하도록 해야 한다.
cargo +nightly llvm-cov --branch

매번 cargo llvm-cov --open과 같이 길게 입력하고 싶지 않다면
~/.cargo/config.toml 파일에 다음과 같이 alias를 정의할 수 있다.
[alias]
cov = "llvm-cov --html --open"
...
이렇게 하면 cargo cov 명령으로 커버리지 리포트를 만들어 브라우저로
열게 할 수 있다.
커버리지 리포트 해석
커버리지 리포트는 각 파일별로 Function/Line/Region/Branch 커버리지를 보여준다. Region 커버리지는 코드 영역이 한 번 이상 실행된 비율을 나타낸다.
커버리지 리포트에서 파일을 선택하면 특정 파일에서 실행되지 않은 부분, 각 라인별 실행 횟수, 각 영역별 실행 횟수 등을 볼 수 있다.
실행되지 않은 Region을 보면 코드에서 제대로 처리하지 않은 상황을 발견하는 데 도움이 된다. 한 라인이 여러 영역으로 나뉠 수 있다면 해당 라인의 실행 횟수뿐 아니라 해당 영역의 실행 횟수도 확인할 수 있다.

한 가지 이해하기 어려운 점은, 리포터 첫 페이지에서는 브랜치 커버리지가
100%로 나왔는데, 파일 안으로 들어와 보면 빨간색으로 표시된 브랜치, 즉
실행되지 않은 브랜치가 있다는 것이다. 이런 문제 때문에 --branch
옵션이 unstable 상태인 것인지도 모르겠다.