パッケージのテストケースは複数のファイルに分散go test <package_name>
しています。実行すると、パッケージ内のすべてのテストケースが実行されます。
ただし、すべてを実行する必要はありません。go test
実行するファイルを指定して、ファイルで定義されたテストケースのみを実行する方法はありますか?
パッケージのテストケースは複数のファイルに分散go test <package_name>
しています。実行すると、パッケージ内のすべてのテストケースが実行されます。
ただし、すべてを実行する必要はありません。go test
実行するファイルを指定して、ファイルで定義されたテストケースのみを実行する方法はありますか?
回答:
2つの方法があります。簡単な方法は、-run
フラグを使用して、実行するテストのパターンマッチング名を提供することです。
例:
$ go test -run NameOfTest
詳しくはドキュメントをご覧ください。
もう1つの方法は、実行するテストを含む特定のファイルに名前を付けることです。
$ 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
(詳細)フラグについて言及する価値があります。ドキュメントから-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
について詳しく説明していただけますか?それについてのマニュアル参照は見つかりません。