就像VonC所说的,您可以使用+build
标签
┌─ oneofone@Oa [/t/tst-tag]
└──? ls
a_test.go b_test.go c_test.go
package tags
import "testing"
func TestA(t *testing.T) {}
// +build !feature1
package tags
import "testing"
func TestB(t *testing.T) {}
// +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)
//更新:不同的逻辑:
// +build all
package tags
import "testing"
func TestA(t *testing.T) {}
// +build all feature1
package tags
import "testing"
func TestB(t *testing.T) {}
// +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)
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)