From 654031f05b42b869b83c3bd1edcc643aaf80ce98 Mon Sep 17 00:00:00 2001 From: Dmitrii Shelamov Date: Thu, 30 Nov 2023 03:37:43 +0100 Subject: [PATCH 1/3] added panic if Test* method of Suite has args or returning values --- suite/suite.go | 5 +++++ suite/suite_test.go | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/suite/suite.go b/suite/suite.go index f3aa9a16b..cf8aa6301 100644 --- a/suite/suite.go +++ b/suite/suite.go @@ -184,6 +184,11 @@ func Run(t *testing.T, suite TestingSuite) { failOnPanic(t, r) }() + if method.Type.NumIn() > 1 || method.Type.NumOut() > 0 { + msg := fmt.Sprintf("testify: suite method '%s' shouldn't have any arguments or returning values\n", method.Name) + panic(msg) + } + if setupTestSuite, ok := suite.(SetupTestSuite); ok { setupTestSuite.SetupTest() } diff --git a/suite/suite_test.go b/suite/suite_test.go index 292dc298c..95d8a74d7 100644 --- a/suite/suite_test.go +++ b/suite/suite_test.go @@ -402,6 +402,47 @@ func TestSkippingSuiteSetup(t *testing.T) { assert.False(t, suiteTester.toreDown) } +// This suite has no Test... methods. It's setup and teardown must be skipped. +type SuiteInvalidTestSignatureTester struct { + Suite + + executedTestCount int + + setUp bool + toreDown bool +} + +func (s *SuiteInvalidTestSignatureTester) SetupSuite() { + s.setUp = true +} + +func (s *SuiteInvalidTestSignatureTester) TestInvalidSignature(somearg string) interface{} { + s.executedTestCount++ + return nil +} + +func (s *SuiteInvalidTestSignatureTester) TearDownSuite() { + s.toreDown = true +} + +func TestSuiteInvalidTestSignature(t *testing.T) { + suiteTester := new(SuiteInvalidTestSignatureTester) + + ok := testing.RunTests(allTestsFilter, []testing.InternalTest{ + { + Name: "invalid signature", + F: func(t *testing.T) { + Run(t, suiteTester) + }, + }, + }) + + require.False(t, ok) + assert.Zero(t, suiteTester.executedTestCount) + assert.True(t, suiteTester.setUp) + assert.True(t, suiteTester.toreDown) +} + func TestSuiteGetters(t *testing.T) { suite := new(SuiteTester) suite.SetT(t) From 2537fa57b939a4d9864ef0faf7b2f2d0b3dfa462 Mon Sep 17 00:00:00 2001 From: Dmitrii Shelamov Date: Thu, 30 Nov 2023 14:45:47 +0100 Subject: [PATCH 2/3] added individual tests for arg and returning value in signature --- suite/suite_test.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/suite/suite_test.go b/suite/suite_test.go index 95d8a74d7..f31226dcf 100644 --- a/suite/suite_test.go +++ b/suite/suite_test.go @@ -416,7 +416,16 @@ func (s *SuiteInvalidTestSignatureTester) SetupSuite() { s.setUp = true } -func (s *SuiteInvalidTestSignatureTester) TestInvalidSignature(somearg string) interface{} { +func (s *SuiteInvalidTestSignatureTester) TestInvalidSignatureReturnValue() interface{} { + s.executedTestCount++ + return nil +} + +func (s *SuiteInvalidTestSignatureTester) TestInvalidSignatureArg(somearg string) { + s.executedTestCount++ +} + +func (s *SuiteInvalidTestSignatureTester) TestInvalidSignatureBoth(somearg string) interface{} { s.executedTestCount++ return nil } From f95ac98da2e8f1f4c2acb095c33b8388743575ae Mon Sep 17 00:00:00 2001 From: Dmitrii Shelamov Date: Thu, 30 Nov 2023 14:46:24 +0100 Subject: [PATCH 3/3] removed \n from panic message --- suite/suite.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/suite/suite.go b/suite/suite.go index cf8aa6301..a9698d1dd 100644 --- a/suite/suite.go +++ b/suite/suite.go @@ -185,7 +185,7 @@ func Run(t *testing.T, suite TestingSuite) { }() if method.Type.NumIn() > 1 || method.Type.NumOut() > 0 { - msg := fmt.Sprintf("testify: suite method '%s' shouldn't have any arguments or returning values\n", method.Name) + msg := fmt.Sprintf("testify: suite method '%s' shouldn't have any arguments or returning values", method.Name) panic(msg) }