func TestRunSuite(t *testing.T) {
	suiteTester := new(SuiteTester)
	Run(t, suiteTester)
	assert.Equal(t, suiteTester.SetupSuiteRunCount, 1)
	assert.Equal(t, suiteTester.TearDownSuiteRunCount, 1)
	assert.Equal(t, suiteTester.SetupTestRunCount, 3)
	assert.Equal(t, suiteTester.TearDownTestRunCount, 3)
	assert.Equal(t, suiteTester.TestOneRunCount, 1)
	assert.Equal(t, suiteTester.TestTwoRunCount, 1)
	assert.Equal(t, suiteTester.NonTestMethodRunCount, 0)
	suiteSkipTester := new(SuiteSkipTester)
	Run(t, suiteSkipTester)
	assert.Equal(t, suiteSkipTester.SetupSuiteRunCount, 1)
	assert.Equal(t, suiteSkipTester.TearDownSuiteRunCount, 1)
}
TestRunSuite will be run by the 'go test' command, so within it, we
can run our suite using the Run(*testing.T, TestingSuite) function.
package suite
import (
	"errors"
	"io/ioutil"
	"os"
	"testing"
	"github.com/stretchr/testify/assert"
)
type SuiteRequireTwice struct{ Suite }
func TestSuiteRequireTwice(t *testing.T) {
	ok := testing.RunTests(
		func(_, _ string) (bool, error) { return true, nil },
		[]testing.InternalTest{{
			Name: "TestSuiteRequireTwice",
			F: func(t *testing.T) {
				suite := new(SuiteRequireTwice)
				Run(t, suite)
			},
		}},
	)
	assert.Equal(t, false, ok)
}
func (s *SuiteRequireTwice) TestRequireOne() {
	r := s.Require()
	r.Equal(1, 2)
}
func (s *SuiteRequireTwice) TestRequireTwo() {
	r := s.Require()
	r.Equal(1, 2)
}
type SuiteTester struct {
	Suite
	SetupSuiteRunCount    int
	TearDownSuiteRunCount int
	SetupTestRunCount     int
	TearDownTestRunCount  int
	TestOneRunCount       int
	TestTwoRunCount       int
	NonTestMethodRunCount int
}
type SuiteSkipTester struct {
	Suite
	SetupSuiteRunCount    int
	TearDownSuiteRunCount int
}
func (suite *SuiteTester) SetupSuite() {
	suite.SetupSuiteRunCount++
}
func (suite *SuiteSkipTester) SetupSuite() {
	suite.SetupSuiteRunCount++
	suite.T().Skip()
}
func (suite *SuiteTester) TearDownSuite() {
	suite.TearDownSuiteRunCount++
}
func (suite *SuiteSkipTester) TearDownSuite() {
	suite.TearDownSuiteRunCount++
}
func (suite *SuiteTester) SetupTest() {
	suite.SetupTestRunCount++
}
func (suite *SuiteTester) TearDownTest() {
	suite.TearDownTestRunCount++
}
func (suite *SuiteTester) TestOne() {
	beforeCount := suite.TestOneRunCount
	suite.TestOneRunCount++
	assert.Equal(suite.T(), suite.TestOneRunCount, beforeCount+1)
	suite.Equal(suite.TestOneRunCount, beforeCount+1)
}
func (suite *SuiteTester) TestTwo() {
	beforeCount := suite.TestTwoRunCount
	suite.TestTwoRunCount++
	assert.NotEqual(suite.T(), suite.TestTwoRunCount, beforeCount)
	suite.NotEqual(suite.TestTwoRunCount, beforeCount)
}
func (suite *SuiteTester) TestSkip() {
	suite.T().Skip()
}
func (suite *SuiteTester) NonTestMethod() {
	suite.NonTestMethodRunCount++
}