mirror of https://github.com/stretchr/testify.git
Merge pull request #318 from esdrasbeleza/master
Add callbacks to be run after and before each testpull/384/head
commit
cd206b0fb2
|
@ -32,3 +32,15 @@ type TearDownAllSuite interface {
|
|||
type TearDownTestSuite interface {
|
||||
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 {
|
||||
setupTestSuite.SetupTest()
|
||||
}
|
||||
if beforeTestSuite, ok := suite.(BeforeTest); ok {
|
||||
beforeTestSuite.BeforeTest(methodFinder.Elem().Name(), method.Name)
|
||||
}
|
||||
defer func() {
|
||||
if afterTestSuite, ok := suite.(AfterTest); ok {
|
||||
afterTestSuite.AfterTest(methodFinder.Elem().Name(), method.Name)
|
||||
}
|
||||
if tearDownTestSuite, ok := suite.(TearDownTestSuite); ok {
|
||||
tearDownTestSuite.TearDownTest()
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"io/ioutil"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
@ -58,6 +59,15 @@ type SuiteTester struct {
|
|||
TestOneRunCount int
|
||||
TestTwoRunCount int
|
||||
NonTestMethodRunCount int
|
||||
|
||||
SuiteNameBefore []string
|
||||
TestNameBefore []string
|
||||
|
||||
SuiteNameAfter []string
|
||||
TestNameAfter []string
|
||||
|
||||
TimeBefore []time.Time
|
||||
TimeAfter []time.Time
|
||||
}
|
||||
|
||||
type SuiteSkipTester struct {
|
||||
|
@ -75,6 +85,18 @@ func (suite *SuiteTester) SetupSuite() {
|
|||
suite.SetupSuiteRunCount++
|
||||
}
|
||||
|
||||
func (suite *SuiteTester) BeforeTest(suiteName, testName string) {
|
||||
suite.SuiteNameBefore = append(suite.SuiteNameBefore, suiteName)
|
||||
suite.TestNameBefore = append(suite.TestNameBefore, testName)
|
||||
suite.TimeBefore = append(suite.TimeBefore, time.Now())
|
||||
}
|
||||
|
||||
func (suite *SuiteTester) AfterTest(suiteName, testName string) {
|
||||
suite.SuiteNameAfter = append(suite.SuiteNameAfter, suiteName)
|
||||
suite.TestNameAfter = append(suite.TestNameAfter, testName)
|
||||
suite.TimeAfter = append(suite.TimeAfter, time.Now())
|
||||
}
|
||||
|
||||
func (suite *SuiteSkipTester) SetupSuite() {
|
||||
suite.SetupSuiteRunCount++
|
||||
suite.T().Skip()
|
||||
|
@ -145,6 +167,35 @@ func TestRunSuite(t *testing.T) {
|
|||
assert.Equal(t, suiteTester.SetupSuiteRunCount, 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)
|
||||
|
||||
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.SuiteNameAfter {
|
||||
assert.Equal(t, "SuiteTester", suiteName)
|
||||
}
|
||||
|
||||
for _, suiteName := range suiteTester.SuiteNameBefore {
|
||||
assert.Equal(t, "SuiteTester", suiteName)
|
||||
}
|
||||
|
||||
for _, when := range suiteTester.TimeAfter {
|
||||
assert.False(t, when.IsZero())
|
||||
}
|
||||
|
||||
for _, when := range suiteTester.TimeBefore {
|
||||
assert.False(t, when.IsZero())
|
||||
}
|
||||
|
||||
// There are three test methods (TestOne, TestTwo, and TestSkip), so
|
||||
// the SetupTest and TearDownTest methods (which should be run once for
|
||||
// each test) should have been run three times.
|
||||
|
|
Loading…
Reference in New Issue