패키지 테스트 사례는 여러 파일에 흩어져 있는데, 실행 go test <package_name>
하면 패키지의 모든 테스트 사례가 실행됩니다.
그래도 모두 실행할 필요는 없습니다. 파일에 go test
정의 된 테스트 케이스 만 실행하도록 실행할 파일을 지정하는 방법이 있습니까?
패키지 테스트 사례는 여러 파일에 흩어져 있는데, 실행 go test <package_name>
하면 패키지의 모든 테스트 사례가 실행됩니다.
그래도 모두 실행할 필요는 없습니다. 파일에 go test
정의 된 테스트 케이스 만 실행하도록 실행할 파일을 지정하는 방법이 있습니까?
답변:
두 가지 방법이 있습니다. 쉬운 방법은 -run
플래그 를 사용하고 실행하려는 테스트의 이름과 일치하는 패턴을 제공하는 것입니다.
예:
$ go test -run NameOfTest
자세한 내용은 문서 를 참조하십시오.
다른 방법은 실행할 테스트가 포함 된 특정 파일의 이름을 지정하는 것입니다.
$ go test foo_test.go
그러나 캐치가 있습니다. 다음과 같은 경우에 잘 작동합니다.
foo.go
에 package foo
있습니다.foo_test.go
에 package foo_test
있고 'foo'를 가져옵니다.경우 foo_test.go
와 foo.go
있는 동일한 패키지 (일반적인 경우) 당신은 빌드에 필요한 모든 다른 파일 이름을 지정해야합니다 foo_test
. 이 예에서는 다음과 같습니다.
$ go test foo_test.go foo.go
-run
패턴 을 사용하는 것이 좋습니다 . 또는 가능한 경우 / 언제든지 항상 모든 패키지 테스트를 실행하십시오.
go help testflag
go test utils.go utils_test.go
출력은 ok command-line-arguments 0.002s
입니다. 테스트를 실행하지 않습니다. 이 테스트 모드를 사용하려는 이유는 패키지에 많은 파일이 포함되어 있고 utils를 제외하고는 아직 컴파일되지 않기 때문입니다. 그래서 다른 파일에 대해 workinqg 전에 utils를 마무리하고 싶습니다. 어떻게해야합니까?
-v
(verbose) 플래그를 언급 할 가치가 있습니다. 문서에서-v Verbose output: log all tests as they are run. Also print all text from Log and Logf calls even if the test succeeds.
@zzzz의 답변은 대부분 완전하지만 다른 사람들이 참조 된 문서 를 파지 않아도되도록 다음과 같이 패키지에서 단일 테스트를 실행할 수 있습니다.
go test packageName -run TestName
테스트가 존재하는 파일 이름이 아니라 테스트 이름을 전달하려고 합니다.
-run
당신이 테스트 클래스에 테스트 실행을 제한 할 수 있도록 플래그는 실제로 정규식을 받아들입니다. 문서에서 :
-run regexp
Run only those tests and examples matching the regular
expression.
단일 테스트를 실행할 때 일반적으로 다음을 수행합니다.
go test -run TestSomethingReallyCool ./folder1/folder2/ -v -count 1
-count 1
또한 캐시되지 않고 매번 테스트가 실행되도록합니다. 경쟁 조건에 대해 테스트하고 때로는 실패하는 테스트를 수행 할 때 유용합니다. 모듈을 사용하지 않는 Go 버전에서는 설정을 통해 동일한 결과를 얻을 수 GOCACHE=off
있지만 Go 모듈과의 상호 작용은 좋지 않습니다.
alias testcases="sed -n 's/func.*\(Test.*\)(.*/\1/p' | xargs | sed 's/ /|/g'"
go test -v -run $(cat coordinator_test.go | testcases)
go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)
go
해당 패키지 의 테스트 파일 안에 있어야합니다.-run TestCaseFunc
-run
제발 (간단한) 방법으로 자세히 설명해 주 시겠습니까? 그에 대한 수동 참조를 찾을 수 없습니다.