The standard testing library in go lacks setup and teardown features, Testify adds this feature (and many others).
For demonstrative purposes I’ve included some code below, followed by its output.
package data
import (
"log"
"testing"
"github.com/stretchr/testify/suite"
)
type MyTestSuite struct {
suite.Suite
db *Store
}
// listen for 'go test' command --> run test methods
func TestMyTestSuite(t *testing.T) {
suite.Run(t, new(MyTestSuite))
}
// run once, before test suite methods
func (s *MyTestSuite) SetupSuite() {
log.Println("SetupSuite()")
// connect the database, save to 's.db'
}
// run once, after test suite methods
func (s *MyTestSuite) TearDownSuite() {
log.Println("TearDownSuite()")
// delete the created database
}
// run before each test
func (s *MyTestSuite) SetupTest() {
log.Println("SetupTest()")
}
// run after each test
func (s *MyTestSuite) TearDownTest() {
log.Println("TearDownTest()")
}
// run before each test
func (s *MyTestSuite) BeforeTest(suiteName, testName string) {
log.Println("BeforeTest()", suiteName, testName)
}
// run after each test
func (s *MyTestSuite) AfterTest(suiteName, testName string) {
log.Println("AfterTest()", suiteName, testName)
}
func (s *MyTestSuite) TestExample1() {
s.Equal(true, true)
}
func (s *MyTestSuite) TestExample2() {
s.Equal(true, true)
}
Code language: Go (go)
% go test -v
=== RUN TestDataTestSuite
2022/03/10 05:58:57 SetupSuite()
=== RUN TestDataTestSuite/TestExample1
2022/03/10 05:58:57 SetupTest()
2022/03/10 05:58:57 BeforeTest() MyTestSuite TestExample1
2022/03/10 05:58:57 AfterTest() MyTestSuite TestExample1
2022/03/10 05:58:57 TearDownTest()
=== RUN TestDataTestSuite/TestExample2
2022/03/10 05:58:57 SetupTest()
2022/03/10 05:58:57 BeforeTest() MyTestSuite TestExample2
2022/03/10 05:58:57 AfterTest() MyTestSuite TestExample2
2022/03/10 05:58:57 TearDownTest()
2022/03/10 05:58:57 TearDownSuite()
--- PASS: TestDataTestSuite (0.00s)
--- PASS: TestDataTestSuite/TestExample1 (0.00s)
--- PASS: TestDataTestSuite/TestExample2 (0.00s)
PASS
Code language: Bash (bash)
In the above example I’m using SetupSuite to create a test database, and TearDownSuite to deleted it after the suite tests have concluded.