testify icon indicating copy to clipboard operation
testify copied to clipboard

How to run SetupTest in table tests using test suite?

Open paymog opened this issue 5 years ago • 2 comments

I've set up a suite for my tests. However, I'm having trouble using the set up and tear down features when using table tests. Is this by design?

package workflows

import (
	"testing"

	log "github.com/sirupsen/logrus"
	"github.com/stretchr/testify/suite"
)

type UnitTestSuite struct {
	suite.Suite
}

func (s *UnitTestSuite) SetupTest() {
	log.Info("setup")
}

func (s *UnitTestSuite) BeforeTest(suiteName, testName string) {
	log.Info("before test")
}

func (s *UnitTestSuite) AfterTest(suiteName, testName string) {
	log.Info("After test")
}


func (s *UnitTestSuite) Test_TableTest() {

	type testCase struct {
		name string
	}

	testCases := []testCase{
		{
			name: "1",
		},
		{
			name: "2",
		},
	}

	for _, testCase := range testCases {

		s.Run(testCase.name, func() {
			// logic ...
			// NOTE that the SetupTest and BeforeTest do not get called for each test here
		})
	}
}

func TestUnitTestSuite(t *testing.T) {
	suite.Run(t, new(UnitTestSuite))
}

When I run the TestUnitTestSuite I get the following output:

=== RUN   TestUnitTestSuite
--- PASS: TestUnitTestSuite (0.00s)
=== RUN   TestUnitTestSuite/Test_TableTest
time="2021-04-17T07:49:28-04:00" level=info msg=setup
time="2021-04-17T07:49:28-04:00" level=info msg="before test"
    --- PASS: TestUnitTestSuite/Test_TableTest (0.00s)
=== RUN   TestUnitTestSuite/Test_TableTest/1
        --- PASS: TestUnitTestSuite/Test_TableTest/1 (0.00s)
=== RUN   TestUnitTestSuite/Test_TableTest/2
time="2021-04-17T07:49:28-04:00" level=info msg="After test"
        --- PASS: TestUnitTestSuite/Test_TableTest/2 (0.00s)
PASS

Note that setup and before test appear only once in the output even though there are two tests being run.

Is there a way for me to automatically run SetupTest (or some alternative) prior to each of my table tests?

paymog avatar Apr 17 '21 11:04 paymog

I think that changing the current behavior of SetupTest/AfterTest/BeforeTest may (and will) lead to some unpredictable problems. So if someone really needs hooks to set something up in the subtest lifecycle, it's better to add new types with interfaces like SetupSubTest, AfterSubTest, BeforeSubTest. At the same time, I don't get how it may be profitable.

viteksafronov avatar Dec 08 '21 09:12 viteksafronov

I think it can be closed after release

https://github.com/stretchr/testify/pull/1246

qerdcv avatar Jan 11 '23 14:01 qerdcv