···3838 test.Ok(t, err) // Fails if err != nil
3939 test.Err(t, err) // Fails if err == nil
40404141+ // Can even add context
4242+ test.Ok(t, err, "doSomething went wrong")
4343+4144 test.True(t, true) // Passes
4245 test.False(t, true) // Fails
4346···104107### Table Driven Tests
105108106109Table driven tests are great! But when you test errors too it can get a bit awkward, you have to do the `if (err != nil) != tt.wantErr` thing and I personally
107107-*always* have to do the boolean logic in my head to make sure I got that right. Enter `test.ErrIsWanted`:
110110+*always* have to do the boolean logic in my head to make sure I got that right. Enter `test.WantErr`:
108111109112```go
110113func TestTableThings(t *testing.T) {
···129132 t.Run(tt.name, func(t *testing.T) {
130133 got, err := SomeFunction()
131134132132- test.ErrIsWanted(t, err, tt.wantErr)
135135+ test.WantErr(t, err, tt.wantErr)
133136 test.Equal(t, got, tt.want)
134137 })
135138 }
+6-6
test.go
···8888 }
8989}
90909191-// ErrIsWanted fails if you got an error and didn't want it, or if you
9191+// WantErr fails if you got an error and didn't want it, or if you
9292// didn't get an error but wanted one.
9393//
9494// It simplifies checking for errors in table driven tests where on any
9595// iteration err may or may not be nil.
9696//
9797-// test.ErrIsWanted(t, errors.New("uh oh"), true) // Passes, got error when we wanted one
9898-// test.ErrIsWanted(t, errors.New("uh oh"), false) // Fails, got error but didn't want one
9999-// test.ErrIsWanted(t, nil, true) // Fails, wanted an error but didn't get one
100100-// test.ErrIsWanted(t, nil, false) // Passes, didn't want an error and didn't get one
101101-func ErrIsWanted(t testing.TB, err error, want bool) {
9797+// test.WantErr(t, errors.New("uh oh"), true) // Passes, got error when we wanted one
9898+// test.WantErr(t, errors.New("uh oh"), false) // Fails, got error but didn't want one
9999+// test.WantErr(t, nil, true) // Fails, wanted an error but didn't get one
100100+// test.WantErr(t, nil, false) // Passes, didn't want an error and didn't get one
101101+func WantErr(t testing.TB, err error, want bool) {
102102 t.Helper()
103103 if (err != nil) != want {
104104 t.Fatalf("\nGot error:\t%v\nWanted error:\t%v\n", err, want)