Difference between revisions of "Golang:Testing"
Jump to navigation
Jump to search
(Created page with "# Golang Testing") |
|||
Line 1: | Line 1: | ||
# Golang Testing | # Golang Testing | ||
+ | |||
+ | This method works best when the `testCase` is a large struct, and only tiny changes are made to that struct for each case. | ||
+ | |||
+ | ```go | ||
+ | func Func(value int) { | ||
+ | return value > 0 | ||
+ | } | ||
+ | |||
+ | func TestFunc(t *testing.T) { | ||
+ | type testCase struct { | ||
+ | desc string | ||
+ | ok bool | ||
+ | value int | ||
+ | } | ||
+ | |||
+ | okFunc := func(changeFn func(*testCase)) testCase { | ||
+ | tc := &testCase { | ||
+ | ok: true, | ||
+ | } | ||
+ | if changeFn != nil { | ||
+ | changeFn(tc) | ||
+ | } | ||
+ | return *tc | ||
+ | } | ||
+ | |||
+ | for _, tc := range []testCase { | ||
+ | // ok values. | ||
+ | okFunc(nil), | ||
+ | okFunc(func(tc *testCase) { | ||
+ | tc.desc = "one" | ||
+ | tc.value = 1 | ||
+ | }, | ||
+ | // not-ok values. | ||
+ | testCase{"not-ok"}, | ||
+ | }{ | ||
+ | if got, want := Func(tc.value), tc.ok; got != want { | ||
+ | t.Errorf("%s: Func(%d) = %t", tc.desc, tc.value, got) | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | ``` |
Latest revision as of 14:39, 20 March 2020
- Golang Testing
This method works best when the `testCase` is a large struct, and only tiny changes are made to that struct for each case.
```go func Func(value int) {
return value > 0
}
func TestFunc(t *testing.T) {
type testCase struct { desc string ok bool value int }
okFunc := func(changeFn func(*testCase)) testCase { tc := &testCase { ok: true, } if changeFn != nil { changeFn(tc) } return *tc }
for _, tc := range []testCase { // ok values. okFunc(nil), okFunc(func(tc *testCase) { tc.desc = "one" tc.value = 1 }, // not-ok values. testCase{"not-ok"}, }{ if got, want := Func(tc.value), tc.ok; got != want { t.Errorf("%s: Func(%d) = %t", tc.desc, tc.value, got) } }
} ```