指定したファイルでテストケースを実行するにはどうすればよいですか?


205

パッケージのテストケースは複数のファイルに分散go test <package_name>しています。実行すると、パッケージ内のすべてのテストケースが実行されます。

ただし、すべてを実行する必要はありません。go test実行するファイルを指定して、ファイルで定義されたテストケースのみを実行する方法はありますか?

go 

回答:


326

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.gofoo.go同じパッケージ(一般的なケース)です、あなたは、ビルドに必要なすべての他のファイルに名前を付ける必要がありますfoo_test。この例では、次のようになります。

$ go test foo_test.go foo.go

-run柄の使用をお勧めします。または、可能な場合は、常にすべてのパッケージテストを実行します。


1
最初の(簡単な)方法-runについて詳しく説明していただけますか?それについてのマニュアル参照は見つかりません。

1
あなたはまた、でそれについての情報を見つけることができますgo help testflag
ジェフリー・マルティネス

コマンドを使用するとgo test utils.go utils_test.go、出力はになりok command-line-arguments 0.002sます。テストは実行されません。このテストモードを使用したいのは、パッケージに多くのファイルが含まれていて、utilsを除いてまだコンパイルされていないためです。だから私は他のファイルでworkinqgの前にutilsを完成させたいと思います。どうやってやるの ?
chmike

テスト時にログに記録される内容を確認する場合は、-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.
robstarbuck

121

@zzzzの答えはほぼ完全ですが、他の人が参照ドキュメントを調べなくても済むように、次のようにパッケージで単一のテストを実行できます。

go test packageName -run TestName

テストが存在するファイル名ではなく、テストの名前を渡したいことに注意してください。

-runあなたはテストのクラスにテスト実行を制限することができるようにフラグが実際に正規表現を受け付けます。ドキュメントから:

-run regexp
    Run only those tests and examples matching the regular
    expression.

28
そのパッケージ名が完全なパッケージ名であることに注意する価値があります。たとえば、「github.com/you/stuff/a/b/c」
garbagecollector '28

1.9.3は、パッケージの相対パスも受け入れます。

2
理由は不明ですが、何らかの理由で、パッケージ名の前に「./」を指定する必要があります
Roozbeh Zabihollahi

12

単一のテストを実行するとき、私は通常次のことを行います:

go test -run TestSomethingReallyCool ./folder1/folder2/ -v -count 1

-count 1また、テストがキャッシュされるのではなく、毎回実行されることが保証されます。競合状態に対してテストしていて、たまに失敗するテストがある場合に役立ちます。モジュールを使用しないGoバージョンでは、設定によって同じことを実現できますGOCACHE=offが、これはGoモジュールとの相互作用が不十分です。


6

intelliJ IDEA go-langプラグイン(私はjetbrains Goglandを想定しています)では、run> edit設定の下でテストの種類をfileに設定するだけです。

スクリーンショットはgoファイルでgoテストを作成します


2
Goglandでは、テストファイルを右クリックして「run foo_test.go」を選択するだけで、テストを含むパッケージがビルドされ、そのテストファイル内のすべてのテストの名前を含む正規表現が-runフラグに渡されます。本当に便利な機能です。
Eloff、2017

4
alias testcases="sed -n 's/func.*\(Test.*\)(.*/\1/p' | xargs | sed 's/ /|/g'"

go test -v -run $(cat coordinator_test.go | testcases)

2
go test -v ./<package_name> -run Test

テスト結果のキャッシュを防止します。

go test -count=1 ./<package_name> -run Test

0
go test -v -timeout 30s <path_to_package> -run ^(TestFuncRegEx)
  • TestFuncは、 go、そのパッケージのテストファイルます。
  • 一連のテストケースに一致する正規表現、または単一のテストケースを実行するための正確なテストケース関数を提供できます。例えば-run TestCaseFunc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.