Documentation

Overview

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

Constants

This section is empty.

Variables

This section is empty.

Functions

func Run

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.

Example (TableTest)

Code:

package main

import (
	"github.com/gotestyourself/gotestyourself/assert"
	"github.com/gotestyourself/gotestyourself/x/subtest"
	"io"
	"net/http"
	"strings"
	"testing"
)

var t = &testing.T{}

func main() {
	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)
		})
	}
}

func startFakeService(t subtest.TestContext) string {

	return "url"
}

func newClient(T subtest.TestContext) *http.Client {
	return &http.Client{}
}
Example (TestSuite)

Code:

package main

import (
	"github.com/gotestyourself/gotestyourself/assert"
	"github.com/gotestyourself/gotestyourself/x/subtest"
	"testing"
)

var t = &testing.T{}

func main() {
	// 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
}

Types

type TestContext

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.

Source Files