t.Helper() in go 1.9
Go 1.9 will ship the Helper() function defined on *testing.T
so that you can finally write assert helpers which actually point you to the position where the assertion fails! Table based tests are still great!
Test
package helper
import "testing"
func TestHelper(t *testing.T) {
t.SkipNow()
a := &asserter{T: t}
a.Equal(1, 1)
a.Equal(1, 2)
a.Equal(1, 3)
}
type asserter struct {
T *testing.T
}
func (m *asserter) Equal(a, b interface{}) {
m.T.Helper()
if a != b {
m.T.Errorf("expected %#v (%T) was %#v (%T)", a, a, b, b)
}
}
Output
=== RUN TestHelper
--- FAIL: TestHelper (0.00s)
run_test.go:8: expected 1 (int) was 2 (int)
run_test.go:9: expected 1 (int) was 3 (int)
FAIL
exit status 1
FAIL github.com/tobstarr/gohelper 0.001s
Test with
docker run -t -i --rm \
-v $(pwd):/go/src/github.com/tobstarr/gohelper \
golang:1.9beta1-alpine \
go test -v github.com/tobstarr/gohelper