gotest.tools: gotest.tools/x/subtest Index | Examples | Files

package subtest

import "gotest.tools/x/subtest"

Package subtest provides a TestContext to subtests which handles cleanup, and provides a testing.TB, and context.Context.

This package was inspired by github.com/frankban/quicktest.

Index

Examples

Package Files

context.go

func Run Uses

func Run(t *testing.T, name string, subtest func(t TestContext)) bool

Run a subtest. When subtest exits, every cleanup function added with TestContext.AddCleanup will be run.

Code:

var testcases = []struct {
    data     io.Reader
    expected int
}{
    {
        data:     strings.NewReader("invalid input"),
        expected: 400,
    },
    {
        data:     strings.NewReader("valid input"),
        expected: 200,
    },
}

for _, tc := range testcases {
    subtest.Run(t, "test-service-call", func(t subtest.TestContext) {
        // startFakeService can shutdown using t.AddCleanup
        url := startFakeService(t)

        req, err := http.NewRequest("POST", url, tc.data)
        assert.NilError(t, err)
        req = req.WithContext(t.Ctx())

        client := newClient(t)
        resp, err := client.Do(req)
        assert.NilError(t, err)
        assert.Equal(t, resp.StatusCode, tc.expected)
    })
}

Code:

// do suite setup before subtests

subtest.Run(t, "test-one", func(t subtest.TestContext) {
    assert.Equal(t, 1, 1)
})
subtest.Run(t, "test-two", func(t subtest.TestContext) {
    assert.Equal(t, 2, 2)
})

// do suite teardown after subtests

type TestContext Uses

type TestContext interface {
    testing.TB
    // AddCleanup function which will be run when before Run returns.
    AddCleanup(f func())
    // Ctx returns a context for the test case. Multiple calls from the same subtest
    // will return the same context. The context is cancelled when Run
    // returns.
    Ctx() context.Context
    // Parallel calls t.Parallel on the testing.TB. Panics if testing.TB does
    // not implement Parallel.
    Parallel()
}

TestContext provides a testing.TB and a context.Context for a test case.

Package subtest imports 2 packages (graph) and is imported by 2 packages. Updated 2018-08-21. Refresh now. Tools for package owners.