GO의 코드 범위에서 파일 제외

3042 단어 codecovertestinggo
일부 코드가 코드 적용 범위에 포함되지 않도록 예외를 만들고 싶은 상황에 처하는 것은 드문 일이 아닙니다. 자동 생성된 코드이거나 타사 API의 래퍼일 수 있습니다. 안타깝게도 다른 많은 언어와 달리 Go에는 이를 수행하는 기본 제공 방법이 없습니다( Hopefully not for too long ). 이 기사에서는 이 목표를 달성하기 위한 간단한 해결 방법을 살펴봅니다.

우선 먼저 빠른 요약입니다. 코드 검사는 go cover 도구를 사용하여 생성할 수 있습니다. 문서에서 도구 사용법은 다음과 같이 설명됩니다.

Usage of 'go tool cover':
Given a coverage profile produced by 'go test':
go test -coverprofile=c.out
Open a web browser displaying annotated source code:
go tool cover -html=c.out



따라서 먼저 다음을 사용하여 테스트를 실행합니다.

go test ./... -coverprofile=coverage.out


그 후 다음을 사용하여 코드 커버리지를 생성합니다.

go tool cover -html=coverage.out


다음과 같이 한 번의 호출로 명령을 차례로 실행하는 것을 좋아합니다.

go test ./... -coverprofile=coverage.out && go tool cover -html=coverage.out


해결 방법



간단 해. 코드 적용 범위는 coverprofile를 기반으로 생성되며 이는 각 코드 파일의 어떤 라인이 적용되고 어떤 라인이 적용되지 않는지에 대한 주석을 추가하는 일반 텍스트 파일에 불과합니다. coverprofile에서 파일에 대한 모든 줄을 제거하면 코드 검사 보고서에 포함되지 않습니다. 저것과 같이 쉬운.
coverprofile는 다음과 같습니다.



코드 적용 범위를 생성할 때마다 coverprofile를 수동으로 조작해야 한다면 이상적이지 않을 것입니다. 더 나은 방법은 이 프로세스를 자동화하는 것입니다. 이를 위해서는 2가지 작업을 수행해야 합니다. 첫 번째는 코드 검사에서 제외할 파일의 경로를 포함하는 파일입니다. 이 파일의 파일 경로에는 전체 패키지 이름이 포함되어야 합니다. "exclude-from-code-coverage.txt"라는 파일을 만들었습니다. 다음은 모양의 스 니펫입니다.



두 번째는 coverprofile에서 exclude-from-code-coverage.txt의 파일을 제거하는 스크립트입니다. 이 간단한 스크립트(exclude-from-code-coverage.sh라는 이름)는 다음과 같은 작업을 수행합니다.

#!/bin/sh
while read p || [ -n "$p" ] 
do  
sed -i '' "/${p//\//\\/}/d" ./coverage.out 
done < ./exclude-from-code-coverage.txt


그리고 마지막으로 모든 것을 하나로 묶습니다.

go test ./... -coverprofile=coverage.out && ./exclude-from-code-coverage.sh && go tool cover -html=coverage.out


분석해 보겠습니다.
  • 첫 번째 명령인 go test ./... -coverprofile=coverage.out는 테스트를 실행하고 coverprofile를 생성합니다.
  • 두 번째 명령인 ./exclude-from-code-coverage.shcoverprofile 에서 코드 적용 범위에서 제외하려는 파일을 제거합니다.
  • 세 번째 명령인 go tool cover -html=coverage.out 는 코드 검사 보고서를 생성했습니다.
  • 좋은 웹페이지 즐겨찾기