在两个必需参数的简单情况下,有四个可能的测试用例IIUC:
什么是最佳实践,请对所有四种情况进行测试?
因为即使在Golang中测试第一个和最后一个案例也很冗长:
func TestGoodParameter(t *testing.T) {
req, _ := http.NewRequest("GET", "/", nil)
q := req.URL.Query()
q.Add("first", "foo")
q.Add("second", "bar")
req.URL.RawQuery = q.Encode()
rec := httptest.NewRecorder()
root(rec, req)
res := rec.Result()
if res.StatusCode != http.StatusOK {
t.Errorf("got %v, expected %v", res.StatusCode, http.StatusOK)
}
}
func TestBadParameter(t *testing.T) {
req, _ := http.NewRequest("GET", "/", nil)
rec := httptest.NewRecorder()
root(rec, req)
res := rec.Result()
if res.StatusCode != http.StatusBadRequest {
t.Errorf("got %v, expected %v", res.StatusCode, http.StatusBadRequest)
}
}
还是我在这里缺少一些技巧?当说有五个参数(其中两个是可选参数)时,显然变得更加复杂!
定义您的测试用例表驱动方式,并为其编写一个实现。您可以通过省略测试用例的名称来简化定义。
package main
import (
"net/http"
"net/http/httptest"
"testing"
)
func TestParameters(t *testing.T) {
testCases := map[string]struct {
params map[string]string
statusCode int
}{
"good params": {
map[string]string{
"first": "foo", "second": "bar",
},
http.StatusOK,
},
"without params": {
map[string]string{},
http.StatusBadRequest,
},
}
for tc, tp := range testCases {
req, _ := http.NewRequest("GET", "/", nil)
q := req.URL.Query()
for k, v := range tp.params {
q.Add(k, v)
}
req.URL.RawQuery = q.Encode()
rec := httptest.NewRecorder()
root(rec, req)
res := rec.Result()
if res.StatusCode != tp.statusCode {
t.Errorf("`%v` failed, got %v, expected %v", tc, res.StatusCode, tp.statusCode)
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句