go help test

1 개요[ | ]

go help test
사용법: go test [build/test flags] [packages] [build/test flags & test binary flags]

'go test'는 임포트 경로로 지명된 패키지들의 테스트를 자동화해주며, 테스트 결과 요약을 다음과 같은 형식으로 프린트한다.

        ok   archive/tar   0.011s
        FAIL archive/zip   0.022s
        ok   compress/gzip 0.033s
        ...

실패한 각 패키지에 대한 자세한 출력이 이어진다.

'go test'는 파일 패턴 "*_test.go"와 이름이 매칭되는 파일과 함께 각 패키지를 다시 컴파일한다. 이러한 추가 파일에는 테스트 기능, 벤치마크 기능, 퍼즈 테스트, 예제 함수가 포함될 수 있다. 자세한 내용은 'go help testfunc'를 참조하자. 나열된 각 패키지는 별도의 테스트 바이너리를 실행한다. 이름이 "_"("_test.go" 포함) 또는 "."로 시작하는 파일은 무시된다.

접미사가 "_test"인 패키지를 선언하는 테스트 파일은 별도의 패키지로 컴파일된 다음 기본 테스트 바이너리와 연결 및 실행된다.

go tool은 "testdata"라는 디렉토리를 무시하므로 테스트에 필요한 보조 데이터를 보관할 수 있다.

테스트 바이너리 구축의 일환으로 테스트 실행은 패키지와 해당 테스트 소스 파일을 조사하여 중요한 문제를 식별한다. go vet에서 문제를 발견하면 go test에서 문제를 보고하고 테스트 바이너리를 실행하지 않는다. 기본 go vet 검사의 신뢰도가 높은 하위 집합만 사용된다. 해당 하위 집합은 'atomic', 'bool', 'buildtags', 'errorsas', 'ifaceassert', 'nilfunc', 'printf', 'stringintconv'이다. "go doc cmd/vet"를 통해 이러한 테스트 및 기타 vet 테스트에 대한 문서를 볼 수 있다. go vet 실행을 비활성화하려면 -vet=off 플래그를 사용한다. 모든 검사를 실행하려면 -vet=all 플래그를 사용하자.

모든 테스트 출력 및 요약 행은 테스트에서 자체 표준오류로 프린트된 경우에도 go 명령어의 표준출력으로 프린트된다. (go 명령어의 표준오류는 테스트 빌드 오류를 프린트하기 위해 예약되어 있다.)

go test는 두 가지 다른 모드에서 실행된다.

로컬 디렉터리 모드라고 하는 첫 번째는 패키지 인수 없이 go test가 호출될 때 발생한다(예: 'go test' 또는 'go test -v'). 이 모드에서 go test는 현재 디렉터리에 있는 패키지 소스와 테스트를 컴파일한 다음 결과 테스트 바이너리를 실행한다. 이 모드에서는 캐싱(아래에서 설명)이 비활성화된다. 패키지 테스트가 완료되면 go test는 테스트 상태('ok' 또는 'FAIL'), 패키지 이름 및 경과 시간을 보여주는 요약 라인을 프린트한다.

패키지 목록 모드라고 하는 두 번째 모드는 go test가 명시적인 패키지 인수로 호출될 때(예: go test math, go test ./... 뿐만 아니라 go test .인 경우도) 발생한다. 이 모드에서 테스트 컴파일을 진행하고 명령줄에 나열된 각 패키지를 테스트한다. 패키지 테스트가 통과하면 go test는 마지막 'ok' 요약 줄만 프린트한다. 패키지 테스트가 실패하면 go test는 전체 테스트 출력을 프린트한다. -bench 또는 -v 플래그와 함께 호출되는 경우 go test는 요청된 벤치마크 결과 또는 상세 로깅을 표시하기 위해 패키지 테스트를 통과하는 경우에도 전체 출력을 프린트한다. 나열된 모든 패키지에 대한 패키지 테스트가 완료되고 출력이 프린트된 후 패키지 테스트가 실패한 경우 go test는 최종 'FAIL' 상태를 프린트한다.

패키지 목록 모드에서만 go test는 성공적인 패키지 테스트 결과를 캐시하여 불필요하게 반복되는 테스트 실행을 방지한다. 테스트 결과를 캐시에서 복구할 수 있는 경우 go test는 테스트 바이너리를 다시 실행하는 대신 이전 출력을 다시 표시한다. 이 경우 요약 행의 경과시간 대신 '(cached)'를 테스트 프린트한다.

캐시에서 일치에 대한 규칙은 실행에 동일한 테스트 바이너리가 포함되고 명령줄의 플래그가 -benchtime, -cpu, -list, -parallel, -run, -short, -timeout, -failfast, -v로 정의된 제한된 '캐시 가능한' 테스트 플래그 집합에서 온다는 것이다 실행 테스트에 이 세트 외부의 테스트 또는 비테스트 플래그가 있으면 결과가 캐시되지 않는다. 테스트 캐싱을 비활성화하려면 캐시 가능한 플래그 이외의 테스트 플래그 또는 인수를 사용하자. 테스트 캐싱을 명시적으로 비활성화하는 일반적인 방법은 -count=1을 사용하는 것이다. 패키지의 소스 루트(일반적으로 $GOPATH) 내에서 파일을 열거나 환경변수를 참조하는 테스트는 파일 및 환경변수가 변경되지 않은 향후 실행과만 일치한다. 캐시된 테스트 결과는 즉시 실행되는 것으로 처리되므로 성공적인 패키지 테스트 결과는 -timeout 설정에 관계없이 캐시되고 재사용된다.

빌드 플래그 외에도 'go test' 자체에서 처리하는 플래그는 다음과 같다.

-args
  • 명령줄의 나머지 부분(-args 이후의 모든 것)을 해석되지 않고 변경되지 않은 상태로 테스트 바이너리에 전달한다.
  • 이 플래그는 명령줄의 나머지 부분을 사용하므로 패키지 목록(있는 경우)이 이 플래그 앞에 나타나야 한다.
-c
  • 테스트 바이너리를 pkg.test로 컴파일하되 실행하지는 않는다(여기서 pkg는 패키지 import 경로의 마지막 요소이다).
  • 파일명은 -o 플래그로 변경할 수 있다.
-exec xprog
  • xprog를 사용하여 테스트 바이너리를 실행한다.
  • 동작은 'go run'과 동일하다. 자세한 내용은 'go help run'을 참조하자.
-json
  • 테스트 출력을 자동 처리에 적합한 JSON으로 변환한다.
  • 인코딩 세부 정보는 'go doc test2json'을 참조하자.
-o file
  • 테스트 바이너리를 명명된 파일로 컴파일한다.
  • 테스트는 계속 실행된다(-c 또는 -i가 지정되지 않은 경우).

테스트 바이너리는 테스트 실행을 제어하는 플래그도 허용한다. 이러한 플래그는 'go test'로도 액세스할 수 있다. 자세한 내용은 'go help testflag'를 참조하자.

빌드 플래그에 대한 자세한 내용은 'go help build'를 참조하자. 패키지 지정에 대한 자세한 내용은 'go help packages'를 참조하자.

2 같이 보기[ | ]

3 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}