my_suite.go
package test
import (
"fmt"
"github.com/stretchr/testify/suite"
)
// suite 测试套件, 由testify包提供
// 提供钩子函数,做一些通用的初始化和收尾工作
// 类似junit中的@BeforeEach, @AfterEach等
// 自定义结构体
type MySuite struct {
suite.Suite
}
// 钩子函数======================================
// 类似@BeforeAll
// 在所有测试之前执行,只执行一次
func (t *MySuite) SetupSuite() {
fmt.Println("setup suite")
}
// 类似@AfterAll
// 在所有测试之后执行,只执行一次
func (t *MySuite) TearDownSuite() {
fmt.Println("teardown suite")
}
// 类似@BeforeEach
// 在每个测试之前执行
func (t *MySuite) SetupTest() {
fmt.Println("setup test")
}
// 类似@AfterEach
// 在每个测试之后执行
func (t *MySuite) TearDownTest() {
fmt.Println("teardown test")
}
// Test方法==============================================
// 定义Test方法
// 方法名要以Test开头
func (t *MySuite) TestSomething1() {
// 通过Suite的Suite.T()获取当前的*testing.T
t.Suite.T().Log("test something1")
}
func (t *MySuite) TestSomething2() {
// 通过Suite的Suite.T()获取当前的*testing.T
t.Suite.T().Log("test something2")
}
my_suite_test.go
package test
import (
"testing"
"github.com/stretchr/testify/suite"
)
func TestMySuite(t *testing.T) {
// 执行MySuite中所有Test开头的方法
suite.Run(t, new(MySuite))
}
D:\dev\project\common-go\test>go test -v -run=TestMySuite
=== RUN TestMySuite
setup suite
=== RUN TestMySuite/TestSomething1
setup test
my_suite.go:46: test something1
teardown test
=== RUN TestMySuite/TestSomething2
setup test
my_suite.go:51: test something2
teardown test
teardown suite
--- PASS: TestMySuite (0.00s)
--- PASS: TestMySuite/TestSomething1 (0.00s)
--- PASS: TestMySuite/TestSomething2 (0.00s)
PASS
ok common-go/test 0.074s