2022-04-03 04:07:16 +00:00
|
|
|
# go-testing-interface
|
|
|
|
|
|
|
|
go-testing-interface is a Go library that exports an interface that
|
|
|
|
`*testing.T` implements as well as a runtime version you can use in its
|
|
|
|
place.
|
|
|
|
|
|
|
|
The purpose of this library is so that you can export test helpers as a
|
|
|
|
public API without depending on the "testing" package, since you can't
|
|
|
|
create a `*testing.T` struct manually. This lets you, for example, use the
|
|
|
|
public testing APIs to generate mock data at runtime, rather than just at
|
|
|
|
test time.
|
|
|
|
|
|
|
|
## Usage & Example
|
|
|
|
|
|
|
|
For usage and examples see the [Godoc](http://godoc.org/github.com/mitchellh/go-testing-interface).
|
|
|
|
|
|
|
|
Given a test helper written using `go-testing-interface` like this:
|
|
|
|
|
|
|
|
import "github.com/mitchellh/go-testing-interface"
|
|
|
|
|
|
|
|
func TestHelper(t testing.T) {
|
|
|
|
t.Fatal("I failed")
|
|
|
|
}
|
|
|
|
|
|
|
|
You can call the test helper in a real test easily:
|
|
|
|
|
|
|
|
import "testing"
|
|
|
|
|
|
|
|
func TestThing(t *testing.T) {
|
|
|
|
TestHelper(t)
|
|
|
|
}
|
|
|
|
|
|
|
|
You can also call the test helper at runtime if needed:
|
|
|
|
|
|
|
|
import "github.com/mitchellh/go-testing-interface"
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
TestHelper(&testing.RuntimeT{})
|
|
|
|
}
|
|
|
|
|
2022-08-06 14:21:18 +00:00
|
|
|
## Versioning
|
|
|
|
|
|
|
|
The tagged version matches the version of Go that the interface is
|
|
|
|
compatible with. For example, the version "1.14.0" is for Go 1.14 and
|
|
|
|
introduced the `Cleanup` function. The patch version (the ".0" in the
|
|
|
|
prior example) is used to fix any bugs found in this library and has no
|
|
|
|
correlation to the supported Go version.
|
|
|
|
|
2022-04-03 04:07:16 +00:00
|
|
|
## Why?!
|
|
|
|
|
|
|
|
**Why would I call a test helper that takes a *testing.T at runtime?**
|
|
|
|
|
|
|
|
You probably shouldn't. The only use case I've seen (and I've had) for this
|
|
|
|
is to implement a "dev mode" for a service where the test helpers are used
|
|
|
|
to populate mock data, create a mock DB, perhaps run service dependencies
|
|
|
|
in-memory, etc.
|
|
|
|
|
|
|
|
Outside of a "dev mode", I've never seen a use case for this and I think
|
|
|
|
there shouldn't be one since the point of the `testing.T` interface is that
|
|
|
|
you can fail immediately.
|