いくつかのテストをgo test
で実行することからスキップ/除外することは可能ですか?
標準のgoテストとして記述されたrestサービスを呼び出し、go test
で実行する統合タイプのテストがかなり大量にあります。新しい機能が開発されるとき、たとえば、テストサーバーに新しい機能がまだ展開されておらず、既存のすべてのテストを実行したい場合(テストする新しいテストを除く)新しい機能)。
私は-run
について知っていますが、実行したいすべてのテストを指定したくありません。それは長いリストになります。同時に、テストを除外するための正規表現を書くことができませんでした。
別のオプションは、同じブランチで実行されないテストをコミットしないことですが、除外するものを指定する方が簡単です。
VonC のように、+build
タグを使用できます
┌─ oneofone@Oa [/t/tst-tag]
└──➜ ls
a_test.go b_test.go c_test.go
a_test.go:
package tags
import "testing"
func TestA(t *testing.T) {}
b_test.go:
// +build !feature1
package tags
import "testing"
func TestB(t *testing.T) {}
c_test.go:
// +build !feature1
// +build !feature2
package tags
import "testing"
func TestC(t *testing.T) {}
次に、-tags
パラメーターを使用してテストを実行します。
┌─ oneofone@Oa [/t/tst-tag]
└──➜ go test -v . | grep PASS:
--- PASS: TestA (0.00 seconds)
--- PASS: TestB (0.00 seconds)
--- PASS: TestC (0.00 seconds)
┌─ oneofone@Oa [/t/tst-tag]
└──➜ go test -v -tags feature1 . | grep PASS:
--- PASS: TestA (0.00 seconds)
┌─ oneofone@Oa [/t/tst-tag]
└──➜ go test -v -tags feature2 . | grep PASS:
--- PASS: TestA (0.00 seconds)
--- PASS: TestB (0.00 seconds)
//更新:異なるロジック:
a_test.go:
// +build all
package tags
import "testing"
func TestA(t *testing.T) {}
b_test.go:
// +build all feature1
package tags
import "testing"
func TestB(t *testing.T) {}
c_test.go:
// +build all feature2
package tags
import "testing"
func TestC(t *testing.T) {}
┌─ oneofone@Oa [/t/tst-tag]
└──➜ go test -v -tags all | grep PASS:
--- PASS: TestA (0.00 seconds)
--- PASS: TestB (0.00 seconds)
--- PASS: TestC (0.00 seconds)
┌─ oneofone@Oa [/t/tst-tag]
└──➜ go test -v -tags feature1 | grep PASS:
--- PASS: TestB (0.00 seconds)
┌─ oneofone@Oa [/t/tst-tag]
└──➜ go test -v -tags="feature1 feature2" | grep PASS:
--- PASS: TestB (0.00 seconds)
--- PASS: TestC (0.00 seconds)
または、次のような名前で特定のテストを呼び出します。
d_test.go:
package tags
import "testing"
func TestA1(t *testing.T) {}
func TestB1(t *testing.T) {}
func TestC1(t *testing.T) {}
func TestD1(t *testing.T) {}
出力:
┌─ oneofone@Oa [/t/tst-tag]
└──➜ go test -run="(A|B)1" -v | grep PASS:
--- PASS: TestA1 (0.00 seconds)
--- PASS: TestB1 (0.00 seconds)
┌─ oneofone@Oa [/t/tst-tag]
└──➜ go test -run="D1" -v | grep PASS:
--- PASS: TestD1 (0.00 seconds)
テストパッケージ にはSkipNow()
およびSkip()
メソッドがあります。したがって、個々のテストの前に次のようなものを追加できます。
func skipCI(t *testing.T) {
if os.Getenv("CI") != "" {
t.Skip("Skipping testing in CI environment")
}
}
func TestNewFeature(t *testing.T) {
skipCI(t)
}
次に、環境変数を設定するか、CI=true go test
を実行してCI
をコマンドローカル変数として設定します。
別のアプローチは、 ショートモード を使用することです。次のガードをテストに追加します
if testing.Short() {
t.Skip("skipping testing in short mode")
}
go test -short
を使用してテストを実行します