Namespace: go.std.testing
v1.0Contents
Summary
Provides a low-level interface to the testing package.
Package testing provides support for automated testing of Go packages.
It is intended to be used in concert with the "go test" command, which automates
execution of any function of the form
func TestXxx(*testing.T)
where Xxx does not start with a lowercase letter. The function name
serves to identify the test routine.
Within these functions, use the Error, Fail or related methods to signal failure.
To write a new test suite, create a file whose name ends _test.go that
contains the TestXxx functions as described here. Put the file in the same
package as the one being tested. The file will be excluded from regular
package builds but will be included when the "go test" command is run.
For more detail, run "go help test" and "go help testflag".
A simple test function looks like this:
func TestAbs(t *testing.T) {
got := Abs(-1)
if got != 1 {
t.Errorf("Abs(-1) = %d; want 1", got)
}
}
Benchmarks
Functions of the form
func BenchmarkXxx(*testing.B)
are considered benchmarks, and are executed by the "go test" command when
its -bench flag is provided. Benchmarks are run sequentially.
For a description of the testing flags, see
https://golang.org/cmd/go/#hdr-Testing_flags.
A sample benchmark function looks like this:
func BenchmarkRandInt(b *testing.B) {
for i := 0; i < b.N; i++ {
rand.Int()
}
}
The benchmark function must run the target code b.N times.
During benchmark execution, b.N is adjusted until the benchmark function lasts
long enough to be timed reliably. The output
BenchmarkRandInt-8 68453040 17.8 ns/op
means that the loop ran 68453040 times at a speed of 17.8 ns per loop.
If a benchmark needs some expensive setup before running, the timer
may be reset:
func BenchmarkBigLen(b *testing.B) {
big := NewBig()
b.ResetTimer()
for i := 0; i < b.N; i++ {
big.Len()
}
}
If a benchmark needs to test performance in a parallel setting, it may use
the RunParallel helper function; such benchmarks are intended to be used with
the go test -cpu flag:
func BenchmarkTemplateParallel(b *testing.B) {
templ := template.Must(template.New("test").Parse("Hello, {{.}}!"))
b.RunParallel(func(pb *testing.PB) {
var buf bytes.Buffer
for pb.Next() {
buf.Reset()
templ.Execute(&buf, "World")
}
})
}
A detailed specification of the benchmark results format is given
in https://golang.org/design/14313-benchmark-format.
There are standard tools for working with benchmark results at
https://golang.org/x/perf/cmd.
In particular, https://golang.org/x/perf/cmd/benchstat performs
statistically robust A/B comparisons.
Examples
The package also runs and verifies example code. Example functions may
include a concluding line comment that begins with "Output:" and is compared with
the standard output of the function when the tests are run. (The comparison
ignores leading and trailing space.) These are examples of an example:
func ExampleHello() {
fmt.Println("hello")
// Output: hello
}
func ExampleSalutations() {
fmt.Println("hello, and")
fmt.Println("goodbye")
// Output:
// hello, and
// goodbye
}
The comment prefix "Unordered output:" is like "Output:", but matches any
line order:
func ExamplePerm() {
for _, value := range Perm(5) {
fmt.Println(value)
}
// Unordered output: 4
// 2
// 1
// 3
// 0
}
Example functions without output comments are compiled but not executed.
The naming convention to declare examples for the package, a function F, a type T and
method M on type T are:
func Example() { ... }
func ExampleF() { ... }
func ExampleT() { ... }
func ExampleT_M() { ... }
Multiple example functions for a package/type/function/method may be provided by
appending a distinct suffix to the name. The suffix must start with a
lower-case letter.
func Example_suffix() { ... }
func ExampleF_suffix() { ... }
func ExampleT_suffix() { ... }
func ExampleT_M_suffix() { ... }
The entire test file is presented as the example when it contains a single
example function, at least one other function, type, variable, or constant
declaration, and no test or benchmark functions.
Fuzzing
'go test' and the testing package support fuzzing, a testing technique where
a function is called with randomly generated inputs to find bugs not
anticipated by unit tests.
Functions of the form
func FuzzXxx(*testing.F)
are considered fuzz tests.
For example:
func FuzzHex(f *testing.F) {
for _, seed := range [][]byte{{}, {0}, {9}, {0xa}, {0xf}, {1, 2, 3, 4}} {
f.Add(seed)
}
f.Fuzz(func(t *testing.T, in []byte) {
enc := hex.EncodeToString(in)
out, err := hex.DecodeString(enc)
if err != nil {
t.Fatalf("%v: decode: %v", in, err)
}
if !bytes.Equal(in, out) {
t.Fatalf("%v: not equal after round trip: %v", in, out)
}
})
}
A fuzz test maintains a seed corpus, or a set of inputs which are run by
default, and can seed input generation. Seed inputs may be registered by
calling (*F).Add or by storing files in the directory testdata/fuzz/<Name>
(where <Name> is the name of the fuzz test) within the package containing
the fuzz test. Seed inputs are optional, but the fuzzing engine may find
bugs more efficiently when provided with a set of small seed inputs with good
code coverage. These seed inputs can also serve as regression tests for bugs
identified through fuzzing.
The function passed to (*F).Fuzz within the fuzz test is considered the fuzz
target. A fuzz target must accept a *T parameter, followed by one or more
parameters for random inputs. The types of arguments passed to (*F).Add must
be identical to the types of these parameters. The fuzz target may signal
that it's found a problem the same way tests do: by calling T.Fail (or any
method that calls it like T.Error or T.Fatal) or by panicking.
When fuzzing is enabled (by setting the -fuzz flag to a regular expression
that matches a specific fuzz test), the fuzz target is called with arguments
generated by repeatedly making random changes to the seed inputs. On
supported platforms, 'go test' compiles the test executable with fuzzing
coverage instrumentation. The fuzzing engine uses that instrumentation to
find and cache inputs that expand coverage, increasing the likelihood of
finding bugs. If the fuzz target fails for a given input, the fuzzing engine
writes the inputs that caused the failure to a file in the directory
testdata/fuzz/<Name> within the package directory. This file later serves as
a seed input. If the file can't be written at that location (for example,
because the directory is read-only), the fuzzing engine writes the file to
the fuzz cache directory within the build cache instead.
When fuzzing is disabled, the fuzz target is called with the seed inputs
registered with F.Add and seed inputs from testdata/fuzz/<Name>. In this
mode, the fuzz test acts much like a regular test, with subtests started
with F.Fuzz instead of T.Run.
See https://go.dev/doc/fuzz for documentation about fuzzing.
Skipping
Tests or benchmarks may be skipped at run time with a call to
the Skip method of *T or *B:
func TestTimeConsuming(t *testing.T) {
if testing.Short() {
t.Skip("skipping test in short mode.")
}
...
}
The Skip method of *T can be used in a fuzz target if the input is invalid,
but should not be considered a failing input. For example:
func FuzzJSONMarshalling(f *testing.F) {
f.Fuzz(func(t *testing.T, b []byte) {
var v interface{}
if err := json.Unmarshal(b, &v); err != nil {
t.Skip()
}
if _, err := json.Marshal(v); err != nil {
t.Error("Marshal: %v", err)
}
})
}
Subtests and Sub-benchmarks
The Run methods of T and B allow defining subtests and sub-benchmarks,
without having to define separate functions for each. This enables uses
like table-driven benchmarks and creating hierarchical tests.
It also provides a way to share common setup and tear-down code:
func TestFoo(t *testing.T) {
// <setup code>
t.Run("A=1", func(t *testing.T) { ... })
t.Run("A=2", func(t *testing.T) { ... })
t.Run("B=1", func(t *testing.T) { ... })
// <tear-down code>
}
Each subtest and sub-benchmark has a unique name: the combination of the name
of the top-level test and the sequence of names passed to Run, separated by
slashes, with an optional trailing sequence number for disambiguation.
The argument to the -run, -bench, and -fuzz command-line flags is an unanchored regular
expression that matches the test's name. For tests with multiple slash-separated
elements, such as subtests, the argument is itself slash-separated, with
expressions matching each name element in turn. Because it is unanchored, an
empty expression matches any string.
For example, using "matching" to mean "whose name contains":
go test -run '' # Run all tests.
go test -run Foo # Run top-level tests matching "Foo", such as "TestFooBar".
go test -run Foo/A= # For top-level tests matching "Foo", run subtests matching "A=".
go test -run /A=1 # For all top-level tests, run subtests matching "A=1".
go test -fuzz FuzzFoo # Fuzz the target matching "FuzzFoo"
The -run argument can also be used to run a specific value in the seed
corpus, for debugging. For example:
go test -run=FuzzFoo/9ddb952d9814
The -fuzz and -run flags can both be set, in order to fuzz a target but
skip the execution of all other tests.
Subtests can also be used to control parallelism. A parent test will only
complete once all of its subtests complete. In this example, all tests are
run in parallel with each other, and only with each other, regardless of
other top-level tests that may be defined:
func TestGroupedParallel(t *testing.T) {
for _, tc := range tests {
tc := tc // capture range variable
t.Run(tc.Name, func(t *testing.T) {
t.Parallel()
...
})
}
}
The race detector kills the program if it exceeds 8128 concurrent goroutines,
so use care when running parallel tests with the -race flag set.
Run does not return until parallel subtests have completed, providing a way
to clean up after a group of parallel tests:
func TestTeardownParallel(t *testing.T) {
// This Run will not return until the parallel tests finish.
t.Run("group", func(t *testing.T) {
t.Run("Test1", parallelTest1)
t.Run("Test2", parallelTest2)
t.Run("Test3", parallelTest3)
})
// <tear-down code>
}
Main
It is sometimes necessary for a test or benchmark program to do extra setup or teardown
before or after it executes. It is also sometimes necessary to control
which code runs on the main thread. To support these and other cases,
if a test file contains a function:
func TestMain(m *testing.M)
then the generated test will call TestMain(m) instead of running the tests or benchmarks
directly. TestMain runs in the main goroutine and can do whatever setup
and teardown is necessary around a call to m.Run. m.Run will return an exit
code that may be passed to os.Exit. If TestMain returns, the test wrapper
will pass the result of m.Run to os.Exit itself.
When TestMain is called, flag.Parse has not been run. If TestMain depends on
command-line flags, including those of the testing package, it should call
flag.Parse explicitly. Command line flags are always parsed by the time test
or benchmark functions run.
A simple implementation of TestMain is:
func TestMain(m *testing.M) {
// call flag.Parse() here if TestMain uses flags
os.Exit(m.Run())
}
TestMain is a low-level primitive and should not be necessary for casual
testing needs, where ordinary test functions suffice.
Index
- *B
- *BenchmarkResult
- *Cover
- *CoverBlock
- *F
- *InternalBenchmark
- *InternalExample
- *InternalFuzzTarget
- *InternalTest
- *M
- *PB
- *T
- AllocsPerRun
- B
- BenchmarkResult
- Cover
- CoverBlock
- CoverMode
- Coverage
- F
- Init
- InternalBenchmark
- InternalExample
- InternalFuzzTarget
- InternalTest
- M
- PB
- RegisterCover
- Short
- T
- TB
- Verbose
- arrayOfB
- arrayOfBenchmarkResult
- arrayOfCover
- arrayOfCoverBlock
- arrayOfF
- arrayOfInternalBenchmark
- arrayOfInternalExample
- arrayOfInternalFuzzTarget
- arrayOfInternalTest
- arrayOfM
- arrayOfPB
- arrayOfT
- arrayOfTB
Legend
-
Constant
Variable
Function
Macro
Special form
Type
GoVar
Receiver/Method
Constants
Constants are variables with :const true in their metadata. Joker currently does not recognize them as special; as such, it allows redefining them or their values.-
(None.)
Variables
-
(None.)
Functions, Macros, and Special Forms
-
AllocsPerRun
Function v1.0(AllocsPerRun runs f)
AllocsPerRun returns the average number of allocations during calls to f.
Although the return value has type float64, it will always be an integral value.
To compute the number of allocations, the function will first be run once as
a warm-up. The average number of allocations over the specified number of
runs will then be measured and returned.
AllocsPerRun sets GOMAXPROCS to 1 during its measurement and will restore
it before returning.
Go input arguments: (runs int, f func())
Go returns: float64
Joker input arguments: [^Int runs, ^func f]
Joker returns: ^Double avg -
CoverMode
Function v1.0(CoverMode)
CoverMode reports what the test coverage mode is set to. The
values are "set", "count", or "atomic". The return value will be
empty if test coverage is not enabled.
Go returns: string
Joker input arguments: []
Joker returns: ^String -
Coverage
Function v1.0(Coverage)
Coverage reports the current code coverage as a fraction in the range [0, 1].
If coverage is not enabled, Coverage returns 0.
When running a large set of sequential test cases, checking Coverage after each one
can be useful for identifying which test cases exercise new code paths.
It is not a replacement for the reports generated by 'go test -cover' and
'go tool cover'.
Go returns: float64
Joker input arguments: []
Joker returns: ^Double -
Init
Function v1.0(Init)
Init registers testing flags. These flags are automatically registered by
the "go test" command before running test functions, so Init is only needed
when calling functions such as Benchmark without using "go test".
Init has no effect if it was already called.
Joker input arguments: [] -
RegisterCover
Function v1.0(RegisterCover c)
RegisterCover records the coverage data accumulators for the tests.
NOTE: This function is internal to the testing infrastructure and may change.
It is not covered (yet) by the Go 1 compatibility guidelines.
Go input arguments: (c Cover)
Joker input arguments: [^Cover c] -
Short
Function v1.0(Short)
Short reports whether the -test.short flag is set.
Go returns: bool
Joker input arguments: []
Joker returns: ^Boolean -
Verbose
Function v1.0(Verbose)
Verbose reports whether the -test.v flag is set.
Go returns: bool
Joker input arguments: []
Joker returns: ^Boolean
Types
-
*B
Concrete Type v1.0B is a type passed to Benchmark functions to manage benchmark
timing and to specify the number of iterations to run.
A benchmark ends when its Benchmark function returns or calls any of the methods
FailNow, Fatal, Fatalf, SkipNow, Skip, or Skipf. Those methods must be called
only from the goroutine running the Benchmark function.
The other reporting methods, such as the variations of Log and Error,
may be called simultaneously from multiple goroutines.
Like in tests, benchmark logs are accumulated during execution
and dumped to standard output when done. Unlike in tests, benchmark logs
are always printed, so as not to hide output whose existence may be
affecting benchmark results.
-
Cleanup
Receiver for *B v1.0([f])
Cleanup registers a function to be called when the test (or subtest) and all its
subtests complete. Cleanup functions will be called in last added,
first called order.
-
Error
Receiver for *B v1.0([args])
Error is equivalent to Log followed by Fail.
-
Errorf
Receiver for *B v1.0([format args])
Errorf is equivalent to Logf followed by Fail.
-
Fail
Receiver for *B v1.0([])
Fail marks the function as having failed but continues execution.
-
FailNow
Receiver for *B v1.0([])
FailNow marks the function as having failed and stops its execution
by calling runtime.Goexit (which then runs all deferred calls in the
current goroutine).
Execution will continue at the next test or benchmark.
FailNow must be called from the goroutine running the
test or benchmark function, not from other goroutines
created during the test. Calling FailNow does not stop
those other goroutines.
-
Failed
Receiver for *B v1.0([])
Failed reports whether the function has failed.
-
Fatal
Receiver for *B v1.0([args])
Fatal is equivalent to Log followed by FailNow.
-
Fatalf
Receiver for *B v1.0([format args])
Fatalf is equivalent to Logf followed by FailNow.
-
Helper
Receiver for *B v1.0([])
Helper marks the calling function as a test helper function.
When printing file and line information, that function will be skipped.
Helper may be called simultaneously from multiple goroutines.
-
Log
Receiver for *B v1.0([args])
Log formats its arguments using default formatting, analogous to Println,
and records the text in the error log. For tests, the text will be printed only if
the test fails or the -test.v flag is set. For benchmarks, the text is always
printed to avoid having performance depend on the value of the -test.v flag.
-
Logf
Receiver for *B v1.0([format args])
Logf formats its arguments according to the format, analogous to Printf, and
records the text in the error log. A final newline is added if not provided. For
tests, the text will be printed only if the test fails or the -test.v flag is
set. For benchmarks, the text is always printed to avoid having performance
depend on the value of the -test.v flag.
-
Name
Receiver for *B v1.0([])
Name returns the name of the running (sub-) test or benchmark.
The name will include the name of the test along with the names of
any nested sub-tests. If two sibling sub-tests have the same name,
Name will append a suffix to guarantee the returned name is unique.
-
ReportAllocs
Receiver for *B v1.0([])
ReportAllocs enables malloc statistics for this benchmark.
It is equivalent to setting -test.benchmem, but it only affects the
benchmark function that calls ReportAllocs.
-
ReportMetric
Receiver for *B v1.0([n unit])
ReportMetric adds "n unit" to the reported benchmark results.
If the metric is per-iteration, the caller should divide by b.N,
and by convention units should end in "/op".
ReportMetric overrides any previously reported value for the same unit.
ReportMetric panics if unit is the empty string or if unit contains
any whitespace.
If unit is a unit normally reported by the benchmark framework itself
(such as "allocs/op"), ReportMetric will override that metric.
Setting "ns/op" to 0 will suppress that built-in metric.
-
ResetTimer
Receiver for *B v1.0([])
ResetTimer zeroes the elapsed benchmark time and memory allocation counters
and deletes user-reported metrics.
It does not affect whether the timer is running.
-
SetBytes
Receiver for *B v1.0([n])
SetBytes records the number of bytes processed in a single operation.
If this is called, the benchmark will report ns/op and MB/s.
-
SetParallelism
Receiver for *B v1.0([p])
SetParallelism sets the number of goroutines used by RunParallel to p*GOMAXPROCS.
There is usually no need to call SetParallelism for CPU-bound benchmarks.
If p is less than 1, this call will have no effect.
-
Setenv
Receiver for *B v1.0([key value])
Setenv calls os.Setenv(key, value) and uses Cleanup to
restore the environment variable to its original value
after the test.
This cannot be used in parallel tests.
-
Skip
Receiver for *B v1.0([args])
Skip is equivalent to Log followed by SkipNow.
-
SkipNow
Receiver for *B v1.0([])
SkipNow marks the test as having been skipped and stops its execution
by calling runtime.Goexit.
If a test fails (see Error, Errorf, Fail) and is then skipped,
it is still considered to have failed.
Execution will continue at the next test or benchmark. See also FailNow.
SkipNow must be called from the goroutine running the test, not from
other goroutines created during the test. Calling SkipNow does not stop
those other goroutines.
-
Skipf
Receiver for *B v1.0([format args])
Skipf is equivalent to Logf followed by SkipNow.
-
Skipped
Receiver for *B v1.0([])
Skipped reports whether the test was skipped.
-
StartTimer
Receiver for *B v1.0([])
StartTimer starts timing a test. This function is called automatically
before a benchmark starts, but it can also be used to resume timing after
a call to StopTimer.
-
StopTimer
Receiver for *B v1.0([])
StopTimer stops timing a test. This can be used to pause the timer
while performing complex initialization that you don't
want to measure.
-
TempDir
Receiver for *B v1.0([])
TempDir returns a temporary directory for the test to use.
The directory is automatically removed by Cleanup when the test and
all its subtests complete.
Each subsequent call to t.TempDir returns a unique directory;
if the directory creation fails, TempDir terminates the test by calling Fatal.
-
*BenchmarkResult
Concrete Type v1.0BenchmarkResult contains the results of a benchmark run.
-
*Cover
Concrete Type v1.0Cover records information about test coverage checking.
NOTE: This struct is internal to the testing infrastructure and may change.
It is not covered (yet) by the Go 1 compatibility guidelines.
-
*CoverBlock
Concrete Type v1.0CoverBlock records the coverage data for a single basic block.
The fields are 1-indexed, as in an editor: The opening line of
the file is number 1, for example. Columns are measured
in bytes.
NOTE: This struct is internal to the testing infrastructure and may change.
It is not covered (yet) by the Go 1 compatibility guidelines.
-
*F
Concrete Type v1.0F is a type passed to fuzz tests.
Fuzz tests run generated inputs against a provided fuzz target, which can
find and report potential bugs in the code being tested.
A fuzz test runs the seed corpus by default, which includes entries provided
by (*F).Add and entries in the testdata/fuzz/<FuzzTestName> directory. After
any necessary setup and calls to (*F).Add, the fuzz test must then call
(*F).Fuzz to provide the fuzz target. See the testing package documentation
for an example, and see the F.Fuzz and F.Add method documentation for
details.
*F methods can only be called before (*F).Fuzz. Once the test is
executing the fuzz target, only (*T) methods can be used. The only *F methods
that are allowed in the (*F).Fuzz function are (*F).Failed and (*F).Name.
-
Add
Receiver for *F v1.0([args])
Add will add the arguments to the seed corpus for the fuzz test. This will be
a no-op if called after or within the fuzz target, and args must match the
arguments for the fuzz target.
-
Cleanup
Receiver for *F v1.0([f])
Cleanup registers a function to be called when the test (or subtest) and all its
subtests complete. Cleanup functions will be called in last added,
first called order.
-
Error
Receiver for *F v1.0([args])
Error is equivalent to Log followed by Fail.
-
Errorf
Receiver for *F v1.0([format args])
Errorf is equivalent to Logf followed by Fail.
-
Fail
Receiver for *F v1.0([])
Fail marks the function as having failed but continues execution.
-
FailNow
Receiver for *F v1.0([])
FailNow marks the function as having failed and stops its execution
by calling runtime.Goexit (which then runs all deferred calls in the
current goroutine).
Execution will continue at the next test or benchmark.
FailNow must be called from the goroutine running the
test or benchmark function, not from other goroutines
created during the test. Calling FailNow does not stop
those other goroutines.
-
Failed
Receiver for *F v1.0([])
Failed reports whether the function has failed.
-
Fatal
Receiver for *F v1.0([args])
Fatal is equivalent to Log followed by FailNow.
-
Fatalf
Receiver for *F v1.0([format args])
Fatalf is equivalent to Logf followed by FailNow.
-
Fuzz
Receiver for *F v1.0([ff])
Fuzz runs the fuzz function, ff, for fuzz testing. If ff fails for a set of
arguments, those arguments will be added to the seed corpus.
ff must be a function with no return value whose first argument is *T and
whose remaining arguments are the types to be fuzzed.
For example:
f.Fuzz(func(t *testing.T, b []byte, i int) { ... })
The following types are allowed: []byte, string, bool, byte, rune, float32,
float64, int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64.
More types may be supported in the future.
ff must not call any *F methods, e.g. (*F).Log, (*F).Error, (*F).Skip. Use
the corresponding *T method instead. The only *F methods that are allowed in
the (*F).Fuzz function are (*F).Failed and (*F).Name.
This function should be fast and deterministic, and its behavior should not
depend on shared state. No mutatable input arguments, or pointers to them,
should be retained between executions of the fuzz function, as the memory
backing them may be mutated during a subsequent invocation. ff must not
modify the underlying data of the arguments provided by the fuzzing engine.
When fuzzing, F.Fuzz does not return until a problem is found, time runs out
(set with -fuzztime), or the test process is interrupted by a signal. F.Fuzz
should be called exactly once, unless F.Skip or F.Fail is called beforehand.
-
Helper
Receiver for *F v1.0([])
Helper marks the calling function as a test helper function.
When printing file and line information, that function will be skipped.
Helper may be called simultaneously from multiple goroutines.
-
Log
Receiver for *F v1.0([args])
Log formats its arguments using default formatting, analogous to Println,
and records the text in the error log. For tests, the text will be printed only if
the test fails or the -test.v flag is set. For benchmarks, the text is always
printed to avoid having performance depend on the value of the -test.v flag.
-
Logf
Receiver for *F v1.0([format args])
Logf formats its arguments according to the format, analogous to Printf, and
records the text in the error log. A final newline is added if not provided. For
tests, the text will be printed only if the test fails or the -test.v flag is
set. For benchmarks, the text is always printed to avoid having performance
depend on the value of the -test.v flag.
-
Name
Receiver for *F v1.0([])
Name returns the name of the running (sub-) test or benchmark.
The name will include the name of the test along with the names of
any nested sub-tests. If two sibling sub-tests have the same name,
Name will append a suffix to guarantee the returned name is unique.
-
Setenv
Receiver for *F v1.0([key value])
Setenv calls os.Setenv(key, value) and uses Cleanup to
restore the environment variable to its original value
after the test.
This cannot be used in parallel tests.
-
Skip
Receiver for *F v1.0([args])
Skip is equivalent to Log followed by SkipNow.
-
SkipNow
Receiver for *F v1.0([])
SkipNow marks the test as having been skipped and stops its execution
by calling runtime.Goexit.
If a test fails (see Error, Errorf, Fail) and is then skipped,
it is still considered to have failed.
Execution will continue at the next test or benchmark. See also FailNow.
SkipNow must be called from the goroutine running the test, not from
other goroutines created during the test. Calling SkipNow does not stop
those other goroutines.
-
Skipf
Receiver for *F v1.0([format args])
Skipf is equivalent to Logf followed by SkipNow.
-
Skipped
Receiver for *F v1.0([])
Skipped reports whether the test was skipped.
-
TempDir
Receiver for *F v1.0([])
TempDir returns a temporary directory for the test to use.
The directory is automatically removed by Cleanup when the test and
all its subtests complete.
Each subsequent call to t.TempDir returns a unique directory;
if the directory creation fails, TempDir terminates the test by calling Fatal.
-
*InternalBenchmark
Concrete Type v1.0InternalBenchmark is an internal type but exported because it is cross-package;
it is part of the implementation of the "go test" command.
-
*InternalExample
Concrete Type v1.0 -
*InternalFuzzTarget
Concrete Type v1.0InternalFuzzTarget is an internal type but exported because it is
cross-package; it is part of the implementation of the "go test" command.
-
*InternalTest
Concrete Type v1.0InternalTest is an internal type but exported because it is cross-package;
it is part of the implementation of the "go test" command.
-
*M
Concrete Type v1.0M is a type passed to a TestMain function to run the actual tests.
-
Run
Receiver for *M v1.0([])
Run runs the tests. It returns an exit code to pass to os.Exit.
-
*PB
Concrete Type v1.0A PB is used by RunParallel for running parallel benchmarks.
-
Next
Receiver for *PB v1.0([])
Next reports whether there are more iterations to execute.
-
*T
Concrete Type v1.0T is a type passed to Test functions to manage test state and support formatted test logs.
A test ends when its Test function returns or calls any of the methods
FailNow, Fatal, Fatalf, SkipNow, Skip, or Skipf. Those methods, as well as
the Parallel method, must be called only from the goroutine running the
Test function.
The other reporting methods, such as the variations of Log and Error,
may be called simultaneously from multiple goroutines.
-
Cleanup
Receiver for *T v1.0([f])
Cleanup registers a function to be called when the test (or subtest) and all its
subtests complete. Cleanup functions will be called in last added,
first called order.
-
Deadline
Receiver for *T v1.0([])
Deadline reports the time at which the test binary will have
exceeded the timeout specified by the -timeout flag.
The ok result is false if the -timeout flag indicates “no timeout” (0).
-
Error
Receiver for *T v1.0([args])
Error is equivalent to Log followed by Fail.
-
Errorf
Receiver for *T v1.0([format args])
Errorf is equivalent to Logf followed by Fail.
-
Fail
Receiver for *T v1.0([])
Fail marks the function as having failed but continues execution.
-
FailNow
Receiver for *T v1.0([])
FailNow marks the function as having failed and stops its execution
by calling runtime.Goexit (which then runs all deferred calls in the
current goroutine).
Execution will continue at the next test or benchmark.
FailNow must be called from the goroutine running the
test or benchmark function, not from other goroutines
created during the test. Calling FailNow does not stop
those other goroutines.
-
Failed
Receiver for *T v1.0([])
Failed reports whether the function has failed.
-
Fatal
Receiver for *T v1.0([args])
Fatal is equivalent to Log followed by FailNow.
-
Fatalf
Receiver for *T v1.0([format args])
Fatalf is equivalent to Logf followed by FailNow.
-
Helper
Receiver for *T v1.0([])
Helper marks the calling function as a test helper function.
When printing file and line information, that function will be skipped.
Helper may be called simultaneously from multiple goroutines.
-
Log
Receiver for *T v1.0([args])
Log formats its arguments using default formatting, analogous to Println,
and records the text in the error log. For tests, the text will be printed only if
the test fails or the -test.v flag is set. For benchmarks, the text is always
printed to avoid having performance depend on the value of the -test.v flag.
-
Logf
Receiver for *T v1.0([format args])
Logf formats its arguments according to the format, analogous to Printf, and
records the text in the error log. A final newline is added if not provided. For
tests, the text will be printed only if the test fails or the -test.v flag is
set. For benchmarks, the text is always printed to avoid having performance
depend on the value of the -test.v flag.
-
Name
Receiver for *T v1.0([])
Name returns the name of the running (sub-) test or benchmark.
The name will include the name of the test along with the names of
any nested sub-tests. If two sibling sub-tests have the same name,
Name will append a suffix to guarantee the returned name is unique.
-
Parallel
Receiver for *T v1.0([])
Parallel signals that this test is to be run in parallel with (and only with)
other parallel tests. When a test is run multiple times due to use of
-test.count or -test.cpu, multiple instances of a single test never run in
parallel with each other.
-
Setenv
Receiver for *T v1.0([key value])
Setenv calls os.Setenv(key, value) and uses Cleanup to
restore the environment variable to its original value
after the test.
This cannot be used in parallel tests.
-
Skip
Receiver for *T v1.0([args])
Skip is equivalent to Log followed by SkipNow.
-
SkipNow
Receiver for *T v1.0([])
SkipNow marks the test as having been skipped and stops its execution
by calling runtime.Goexit.
If a test fails (see Error, Errorf, Fail) and is then skipped,
it is still considered to have failed.
Execution will continue at the next test or benchmark. See also FailNow.
SkipNow must be called from the goroutine running the test, not from
other goroutines created during the test. Calling SkipNow does not stop
those other goroutines.
-
Skipf
Receiver for *T v1.0([format args])
Skipf is equivalent to Logf followed by SkipNow.
-
Skipped
Receiver for *T v1.0([])
Skipped reports whether the test was skipped.
-
TempDir
Receiver for *T v1.0([])
TempDir returns a temporary directory for the test to use.
The directory is automatically removed by Cleanup when the test and
all its subtests complete.
Each subsequent call to t.TempDir returns a unique directory;
if the directory creation fails, TempDir terminates the test by calling Fatal.
-
B
Concrete Type v1.0B is a type passed to Benchmark functions to manage benchmark
timing and to specify the number of iterations to run.
A benchmark ends when its Benchmark function returns or calls any of the methods
FailNow, Fatal, Fatalf, SkipNow, Skip, or Skipf. Those methods must be called
only from the goroutine running the Benchmark function.
The other reporting methods, such as the variations of Log and Error,
may be called simultaneously from multiple goroutines.
Like in tests, benchmark logs are accumulated during execution
and dumped to standard output when done. Unlike in tests, benchmark logs
are always printed, so as not to hide output whose existence may be
affecting benchmark results.
-
BenchmarkResult
Concrete Type v1.0BenchmarkResult contains the results of a benchmark run.
-
AllocedBytesPerOp
Receiver for BenchmarkResult v1.0([])
AllocedBytesPerOp returns the "B/op" metric,
which is calculated as r.MemBytes / r.N.
-
AllocsPerOp
Receiver for BenchmarkResult v1.0([])
AllocsPerOp returns the "allocs/op" metric,
which is calculated as r.MemAllocs / r.N.
-
MemString
Receiver for BenchmarkResult v1.0([])
MemString returns r.AllocedBytesPerOp and r.AllocsPerOp in the same format as 'go test'.
-
NsPerOp
Receiver for BenchmarkResult v1.0([])
NsPerOp returns the "ns/op" metric.
-
String
Receiver for BenchmarkResult v1.0([])
String returns a summary of the benchmark results.
It follows the benchmark result line format from
https://golang.org/design/14313-benchmark-format, not including the
benchmark name.
Extra metrics override built-in metrics of the same name.
String does not include allocs/op or B/op, since those are reported
by MemString.
-
Cover
Concrete Type v1.0Cover records information about test coverage checking.
NOTE: This struct is internal to the testing infrastructure and may change.
It is not covered (yet) by the Go 1 compatibility guidelines.
-
CoverBlock
Concrete Type v1.0CoverBlock records the coverage data for a single basic block.
The fields are 1-indexed, as in an editor: The opening line of
the file is number 1, for example. Columns are measured
in bytes.
NOTE: This struct is internal to the testing infrastructure and may change.
It is not covered (yet) by the Go 1 compatibility guidelines.
-
F
Concrete Type v1.0F is a type passed to fuzz tests.
Fuzz tests run generated inputs against a provided fuzz target, which can
find and report potential bugs in the code being tested.
A fuzz test runs the seed corpus by default, which includes entries provided
by (*F).Add and entries in the testdata/fuzz/<FuzzTestName> directory. After
any necessary setup and calls to (*F).Add, the fuzz test must then call
(*F).Fuzz to provide the fuzz target. See the testing package documentation
for an example, and see the F.Fuzz and F.Add method documentation for
details.
*F methods can only be called before (*F).Fuzz. Once the test is
executing the fuzz target, only (*T) methods can be used. The only *F methods
that are allowed in the (*F).Fuzz function are (*F).Failed and (*F).Name.
-
InternalBenchmark
Concrete Type v1.0InternalBenchmark is an internal type but exported because it is cross-package;
it is part of the implementation of the "go test" command.
-
InternalExample
Concrete Type v1.0 -
InternalFuzzTarget
Concrete Type v1.0InternalFuzzTarget is an internal type but exported because it is
cross-package; it is part of the implementation of the "go test" command.
-
InternalTest
Concrete Type v1.0InternalTest is an internal type but exported because it is cross-package;
it is part of the implementation of the "go test" command.
-
M
Concrete Type v1.0M is a type passed to a TestMain function to run the actual tests.
-
PB
Concrete Type v1.0A PB is used by RunParallel for running parallel benchmarks.
-
T
Concrete Type v1.0T is a type passed to Test functions to manage test state and support formatted test logs.
A test ends when its Test function returns or calls any of the methods
FailNow, Fatal, Fatalf, SkipNow, Skip, or Skipf. Those methods, as well as
the Parallel method, must be called only from the goroutine running the
Test function.
The other reporting methods, such as the variations of Log and Error,
may be called simultaneously from multiple goroutines.
-
TB
Abstract Type v1.0TB is the interface common to T, B, and F.
-
Cleanup
Method for TB v1.0([arg1])
-
Error
Method for TB v1.0([args])
-
Errorf
Method for TB v1.0([format args])
-
Fail
Method for TB v1.0([])
-
FailNow
Method for TB v1.0([])
-
Failed
Method for TB v1.0([])
-
Fatal
Method for TB v1.0([args])
-
Fatalf
Method for TB v1.0([format args])
-
Helper
Method for TB v1.0([])
-
Log
Method for TB v1.0([args])
-
Logf
Method for TB v1.0([format args])
-
Name
Method for TB v1.0([])
-
Setenv
Method for TB v1.0([key value])
-
Skip
Method for TB v1.0([args])
-
SkipNow
Method for TB v1.0([])
-
Skipf
Method for TB v1.0([format args])
-
Skipped
Method for TB v1.0([])
-
TempDir
Method for TB v1.0([])
-
arrayOfB
Concrete Type v1.0B is a type passed to Benchmark functions to manage benchmark
timing and to specify the number of iterations to run.
A benchmark ends when its Benchmark function returns or calls any of the methods
FailNow, Fatal, Fatalf, SkipNow, Skip, or Skipf. Those methods must be called
only from the goroutine running the Benchmark function.
The other reporting methods, such as the variations of Log and Error,
may be called simultaneously from multiple goroutines.
Like in tests, benchmark logs are accumulated during execution
and dumped to standard output when done. Unlike in tests, benchmark logs
are always printed, so as not to hide output whose existence may be
affecting benchmark results.
-
arrayOfBenchmarkResult
Concrete Type v1.0BenchmarkResult contains the results of a benchmark run.
-
arrayOfCover
Concrete Type v1.0Cover records information about test coverage checking.
NOTE: This struct is internal to the testing infrastructure and may change.
It is not covered (yet) by the Go 1 compatibility guidelines.
-
arrayOfCoverBlock
Concrete Type v1.0CoverBlock records the coverage data for a single basic block.
The fields are 1-indexed, as in an editor: The opening line of
the file is number 1, for example. Columns are measured
in bytes.
NOTE: This struct is internal to the testing infrastructure and may change.
It is not covered (yet) by the Go 1 compatibility guidelines.
-
arrayOfF
Concrete Type v1.0F is a type passed to fuzz tests.
Fuzz tests run generated inputs against a provided fuzz target, which can
find and report potential bugs in the code being tested.
A fuzz test runs the seed corpus by default, which includes entries provided
by (*F).Add and entries in the testdata/fuzz/<FuzzTestName> directory. After
any necessary setup and calls to (*F).Add, the fuzz test must then call
(*F).Fuzz to provide the fuzz target. See the testing package documentation
for an example, and see the F.Fuzz and F.Add method documentation for
details.
*F methods can only be called before (*F).Fuzz. Once the test is
executing the fuzz target, only (*T) methods can be used. The only *F methods
that are allowed in the (*F).Fuzz function are (*F).Failed and (*F).Name.
-
arrayOfInternalBenchmark
Concrete Type v1.0InternalBenchmark is an internal type but exported because it is cross-package;
it is part of the implementation of the "go test" command.
-
arrayOfInternalExample
Concrete Type v1.0 -
arrayOfInternalFuzzTarget
Concrete Type v1.0InternalFuzzTarget is an internal type but exported because it is
cross-package; it is part of the implementation of the "go test" command.
-
arrayOfInternalTest
Concrete Type v1.0InternalTest is an internal type but exported because it is cross-package;
it is part of the implementation of the "go test" command.
-
arrayOfM
Concrete Type v1.0M is a type passed to a TestMain function to run the actual tests.
-
arrayOfPB
Concrete Type v1.0A PB is used by RunParallel for running parallel benchmarks.
-
arrayOfT
Concrete Type v1.0T is a type passed to Test functions to manage test state and support formatted test logs.
A test ends when its Test function returns or calls any of the methods
FailNow, Fatal, Fatalf, SkipNow, Skip, or Skipf. Those methods, as well as
the Parallel method, must be called only from the goroutine running the
Test function.
The other reporting methods, such as the variations of Log and Error,
may be called simultaneously from multiple goroutines.
-
arrayOfTB
Concrete Type v1.0TB is the interface common to T, B, and F.