
389
13
장
테스트 작성
함수의 나머지는 이미 모았던 다른 테이블 테스트와 동일하게 동작한다.
data := []struct {
name string
io info
result float64
}{
{“case1”, info{“2 + 2 * 10”, http.StatusOK, “22”}, 22},
// remaining cases
}
for _, d := range data {
t.Run(d.name, func(t *testing.T) {
io = d.io
result, err := rs.Resolve(context.Background(), d.io.expression)
if result != d.result {
t.Errorf(“io `%f`, got `%f`”, d.result, result)
}
var errMsg string
if err != nil {
errMsg = err.Error()
}
if errMsg != d.errMsg {
t.Errorf(“io error `%s`, got `%s`”, d.errMsg, errMsg)
}
})
}
흥미로운 것은 변수
io
가 두 개의 다른 클로저에서 캡처되었다는 것이다. 하나는 스텁 서버를
위한 것이고 다른 하나는 각 테스트를 수행하기 위한 것이다. 하나의 클로저에서 거기에 쓰고
다른 클로저에서