Change discovery subpackages to not use testify in tests (#4612)
* Change discovery subpackages to not use testify in tests Signed-off-by: Camille Janicki <camille.janicki@gmail.com> * Remove testify suite from vendor dir Signed-off-by: Camille Janicki <camille.janicki@gmail.com>pull/4623/merge
parent
18a9a390b5
commit
b035ea0ea9
@ -1,65 +0,0 @@ |
||||
// Package suite contains logic for creating testing suite structs
|
||||
// and running the methods on those structs as tests. The most useful
|
||||
// piece of this package is that you can create setup/teardown methods
|
||||
// on your testing suites, which will run before/after the whole suite
|
||||
// or individual tests (depending on which interface(s) you
|
||||
// implement).
|
||||
//
|
||||
// A testing suite is usually built by first extending the built-in
|
||||
// suite functionality from suite.Suite in testify. Alternatively,
|
||||
// you could reproduce that logic on your own if you wanted (you
|
||||
// just need to implement the TestingSuite interface from
|
||||
// suite/interfaces.go).
|
||||
//
|
||||
// After that, you can implement any of the interfaces in
|
||||
// suite/interfaces.go to add setup/teardown functionality to your
|
||||
// suite, and add any methods that start with "Test" to add tests.
|
||||
// Methods that do not match any suite interfaces and do not begin
|
||||
// with "Test" will not be run by testify, and can safely be used as
|
||||
// helper methods.
|
||||
//
|
||||
// Once you've built your testing suite, you need to run the suite
|
||||
// (using suite.Run from testify) inside any function that matches the
|
||||
// identity that "go test" is already looking for (i.e.
|
||||
// func(*testing.T)).
|
||||
//
|
||||
// Regular expression to select test suites specified command-line
|
||||
// argument "-run". Regular expression to select the methods
|
||||
// of test suites specified command-line argument "-m".
|
||||
// Suite object has assertion methods.
|
||||
//
|
||||
// A crude example:
|
||||
// // Basic imports
|
||||
// import (
|
||||
// "testing"
|
||||
// "github.com/stretchr/testify/assert"
|
||||
// "github.com/stretchr/testify/suite"
|
||||
// )
|
||||
//
|
||||
// // Define the suite, and absorb the built-in basic suite
|
||||
// // functionality from testify - including a T() method which
|
||||
// // returns the current testing context
|
||||
// type ExampleTestSuite struct {
|
||||
// suite.Suite
|
||||
// VariableThatShouldStartAtFive int
|
||||
// }
|
||||
//
|
||||
// // Make sure that VariableThatShouldStartAtFive is set to five
|
||||
// // before each test
|
||||
// func (suite *ExampleTestSuite) SetupTest() {
|
||||
// suite.VariableThatShouldStartAtFive = 5
|
||||
// }
|
||||
//
|
||||
// // All methods that begin with "Test" are run as tests within a
|
||||
// // suite.
|
||||
// func (suite *ExampleTestSuite) TestExample() {
|
||||
// assert.Equal(suite.T(), 5, suite.VariableThatShouldStartAtFive)
|
||||
// suite.Equal(5, suite.VariableThatShouldStartAtFive)
|
||||
// }
|
||||
//
|
||||
// // In order for 'go test' to run this suite, we need to create
|
||||
// // a normal test function and pass our suite to suite.Run
|
||||
// func TestExampleTestSuite(t *testing.T) {
|
||||
// suite.Run(t, new(ExampleTestSuite))
|
||||
// }
|
||||
package suite |
||||
@ -1,46 +0,0 @@ |
||||
package suite |
||||
|
||||
import "testing" |
||||
|
||||
// TestingSuite can store and return the current *testing.T context
|
||||
// generated by 'go test'.
|
||||
type TestingSuite interface { |
||||
T() *testing.T |
||||
SetT(*testing.T) |
||||
} |
||||
|
||||
// SetupAllSuite has a SetupSuite method, which will run before the
|
||||
// tests in the suite are run.
|
||||
type SetupAllSuite interface { |
||||
SetupSuite() |
||||
} |
||||
|
||||
// SetupTestSuite has a SetupTest method, which will run before each
|
||||
// test in the suite.
|
||||
type SetupTestSuite interface { |
||||
SetupTest() |
||||
} |
||||
|
||||
// TearDownAllSuite has a TearDownSuite method, which will run after
|
||||
// all the tests in the suite have been run.
|
||||
type TearDownAllSuite interface { |
||||
TearDownSuite() |
||||
} |
||||
|
||||
// TearDownTestSuite has a TearDownTest method, which will run after
|
||||
// each test in the suite.
|
||||
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) |
||||
} |
||||
@ -1,121 +0,0 @@ |
||||
package suite |
||||
|
||||
import ( |
||||
"flag" |
||||
"fmt" |
||||
"os" |
||||
"reflect" |
||||
"regexp" |
||||
"testing" |
||||
|
||||
"github.com/stretchr/testify/assert" |
||||
"github.com/stretchr/testify/require" |
||||
) |
||||
|
||||
var matchMethod = flag.String("testify.m", "", "regular expression to select tests of the testify suite to run") |
||||
|
||||
// Suite is a basic testing suite with methods for storing and
|
||||
// retrieving the current *testing.T context.
|
||||
type Suite struct { |
||||
*assert.Assertions |
||||
require *require.Assertions |
||||
t *testing.T |
||||
} |
||||
|
||||
// T retrieves the current *testing.T context.
|
||||
func (suite *Suite) T() *testing.T { |
||||
return suite.t |
||||
} |
||||
|
||||
// SetT sets the current *testing.T context.
|
||||
func (suite *Suite) SetT(t *testing.T) { |
||||
suite.t = t |
||||
suite.Assertions = assert.New(t) |
||||
suite.require = require.New(t) |
||||
} |
||||
|
||||
// Require returns a require context for suite.
|
||||
func (suite *Suite) Require() *require.Assertions { |
||||
if suite.require == nil { |
||||
suite.require = require.New(suite.T()) |
||||
} |
||||
return suite.require |
||||
} |
||||
|
||||
// Assert returns an assert context for suite. Normally, you can call
|
||||
// `suite.NoError(expected, actual)`, but for situations where the embedded
|
||||
// methods are overridden (for example, you might want to override
|
||||
// assert.Assertions with require.Assertions), this method is provided so you
|
||||
// can call `suite.Assert().NoError()`.
|
||||
func (suite *Suite) Assert() *assert.Assertions { |
||||
if suite.Assertions == nil { |
||||
suite.Assertions = assert.New(suite.T()) |
||||
} |
||||
return suite.Assertions |
||||
} |
||||
|
||||
// Run takes a testing suite and runs all of the tests attached
|
||||
// to it.
|
||||
func Run(t *testing.T, suite TestingSuite) { |
||||
suite.SetT(t) |
||||
|
||||
if setupAllSuite, ok := suite.(SetupAllSuite); ok { |
||||
setupAllSuite.SetupSuite() |
||||
} |
||||
defer func() { |
||||
if tearDownAllSuite, ok := suite.(TearDownAllSuite); ok { |
||||
tearDownAllSuite.TearDownSuite() |
||||
} |
||||
}() |
||||
|
||||
methodFinder := reflect.TypeOf(suite) |
||||
tests := []testing.InternalTest{} |
||||
for index := 0; index < methodFinder.NumMethod(); index++ { |
||||
method := methodFinder.Method(index) |
||||
ok, err := methodFilter(method.Name) |
||||
if err != nil { |
||||
fmt.Fprintf(os.Stderr, "testify: invalid regexp for -m: %s\n", err) |
||||
os.Exit(1) |
||||
} |
||||
if ok { |
||||
test := testing.InternalTest{ |
||||
Name: method.Name, |
||||
F: func(t *testing.T) { |
||||
parentT := suite.T() |
||||
suite.SetT(t) |
||||
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() |
||||
} |
||||
suite.SetT(parentT) |
||||
}() |
||||
method.Func.Call([]reflect.Value{reflect.ValueOf(suite)}) |
||||
}, |
||||
} |
||||
tests = append(tests, test) |
||||
} |
||||
} |
||||
|
||||
if !testing.RunTests(func(_, _ string) (bool, error) { return true, nil }, |
||||
tests) { |
||||
t.Fail() |
||||
} |
||||
} |
||||
|
||||
// Filtering method according to set regular expression
|
||||
// specified command-line argument -m
|
||||
func methodFilter(name string) (bool, error) { |
||||
if ok, _ := regexp.MatchString("^Test", name); !ok { |
||||
return false, nil |
||||
} |
||||
return regexp.MatchString(*matchMethod, name) |
||||
} |
||||
Loading…
Reference in new issue