mirror of https://github.com/stretchr/testify.git
Add callbacks to run before and after each test
parent
d77da356e5
commit
fcedfe2aad
|
@ -32,3 +32,15 @@ type TearDownAllSuite interface {
|
||||||
type TearDownTestSuite interface {
|
type TearDownTestSuite interface {
|
||||||
TearDownTest()
|
TearDownTest()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BeforeTest has a function to be executed right before the test
|
||||||
|
// starts and receives the suite and test names as input
|
||||||
|
type BeforeTest interface {
|
||||||
|
BeforeTest(suiteName, testName string)
|
||||||
|
}
|
||||||
|
|
||||||
|
// AfterTest has a function to be executed right after the test
|
||||||
|
// finishes and receives the suite and test names as input
|
||||||
|
type AfterTest interface {
|
||||||
|
AfterTest(suiteName, testName string)
|
||||||
|
}
|
||||||
|
|
|
@ -86,7 +86,13 @@ func Run(t *testing.T, suite TestingSuite) {
|
||||||
if setupTestSuite, ok := suite.(SetupTestSuite); ok {
|
if setupTestSuite, ok := suite.(SetupTestSuite); ok {
|
||||||
setupTestSuite.SetupTest()
|
setupTestSuite.SetupTest()
|
||||||
}
|
}
|
||||||
|
if beforeTestSuite, ok := suite.(BeforeTest); ok {
|
||||||
|
beforeTestSuite.BeforeTest(methodFinder.Elem().Name(), method.Name)
|
||||||
|
}
|
||||||
defer func() {
|
defer func() {
|
||||||
|
if afterTestSuite, ok := suite.(AfterTest); ok {
|
||||||
|
afterTestSuite.AfterTest(methodFinder.Elem().Name(), method.Name)
|
||||||
|
}
|
||||||
if tearDownTestSuite, ok := suite.(TearDownTestSuite); ok {
|
if tearDownTestSuite, ok := suite.(TearDownTestSuite); ok {
|
||||||
tearDownTestSuite.TearDownTest()
|
tearDownTestSuite.TearDownTest()
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,6 +58,12 @@ type SuiteTester struct {
|
||||||
TestOneRunCount int
|
TestOneRunCount int
|
||||||
TestTwoRunCount int
|
TestTwoRunCount int
|
||||||
NonTestMethodRunCount int
|
NonTestMethodRunCount int
|
||||||
|
|
||||||
|
SuiteNameBefore []string
|
||||||
|
TestNameBefore []string
|
||||||
|
|
||||||
|
SuiteNameAfter []string
|
||||||
|
TestNameAfter []string
|
||||||
}
|
}
|
||||||
|
|
||||||
type SuiteSkipTester struct {
|
type SuiteSkipTester struct {
|
||||||
|
@ -75,6 +81,16 @@ func (suite *SuiteTester) SetupSuite() {
|
||||||
suite.SetupSuiteRunCount++
|
suite.SetupSuiteRunCount++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (suite *SuiteTester) BeforeTest(suiteName, testName string) {
|
||||||
|
suite.SuiteNameBefore = append(suite.SuiteNameBefore, suiteName)
|
||||||
|
suite.TestNameBefore = append(suite.TestNameBefore, testName)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (suite *SuiteTester) AfterTest(suiteName, testName string) {
|
||||||
|
suite.SuiteNameAfter = append(suite.SuiteNameAfter, suiteName)
|
||||||
|
suite.TestNameAfter = append(suite.TestNameAfter, testName)
|
||||||
|
}
|
||||||
|
|
||||||
func (suite *SuiteSkipTester) SetupSuite() {
|
func (suite *SuiteSkipTester) SetupSuite() {
|
||||||
suite.SetupSuiteRunCount++
|
suite.SetupSuiteRunCount++
|
||||||
suite.T().Skip()
|
suite.T().Skip()
|
||||||
|
@ -145,6 +161,27 @@ func TestRunSuite(t *testing.T) {
|
||||||
assert.Equal(t, suiteTester.SetupSuiteRunCount, 1)
|
assert.Equal(t, suiteTester.SetupSuiteRunCount, 1)
|
||||||
assert.Equal(t, suiteTester.TearDownSuiteRunCount, 1)
|
assert.Equal(t, suiteTester.TearDownSuiteRunCount, 1)
|
||||||
|
|
||||||
|
assert.Equal(t, len(suiteTester.SuiteNameAfter), 3)
|
||||||
|
assert.Equal(t, len(suiteTester.SuiteNameBefore), 3)
|
||||||
|
assert.Equal(t, len(suiteTester.TestNameAfter), 3)
|
||||||
|
assert.Equal(t, len(suiteTester.TestNameBefore), 3)
|
||||||
|
|
||||||
|
for _, suiteName := range suiteTester.SuiteNameAfter {
|
||||||
|
assert.Equal(t, "SuiteTester", suiteName)
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.Contains(t, suiteTester.TestNameAfter, "TestOne")
|
||||||
|
assert.Contains(t, suiteTester.TestNameAfter, "TestTwo")
|
||||||
|
assert.Contains(t, suiteTester.TestNameAfter, "TestSkip")
|
||||||
|
|
||||||
|
assert.Contains(t, suiteTester.TestNameBefore, "TestOne")
|
||||||
|
assert.Contains(t, suiteTester.TestNameBefore, "TestTwo")
|
||||||
|
assert.Contains(t, suiteTester.TestNameBefore, "TestSkip")
|
||||||
|
|
||||||
|
for _, suiteName := range suiteTester.SuiteNameBefore {
|
||||||
|
assert.Equal(t, "SuiteTester", suiteName)
|
||||||
|
}
|
||||||
|
|
||||||
// There are three test methods (TestOne, TestTwo, and TestSkip), so
|
// There are three test methods (TestOne, TestTwo, and TestSkip), so
|
||||||
// the SetupTest and TearDownTest methods (which should be run once for
|
// the SetupTest and TearDownTest methods (which should be run once for
|
||||||
// each test) should have been run three times.
|
// each test) should have been run three times.
|
||||||
|
|
Loading…
Reference in New Issue