moe*_*sef 10 unit-testing go gorilla servemux
我正在使用Gorilla mux和net/http包创建一些路由,如下所示
package routes
//some imports
//some stuff
func AddQuestionRoutes(r *mux.Router) {
s := r.PathPrefix("/questions").Subrouter()
s.HandleFunc("/{question_id}/{question_type}", getQuestion).Methods("GET")
s.HandleFunc("/", postQuestion).Methods("POST")
s.HandleFunc("/", putQuestion).Methods("PUT")
s.HandleFunc("/{question_id}", deleteQuestion).Methods("DELETE")
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写测试来测试这些路线.例如,我试图测试GET路由专门尝试400返回,所以我有以下测试代码.
package routes
//some imports
var m *mux.Router
var req *http.Request
var err error
var respRec *httptest.ResponseRecorder
func init() {
//mux router with added question routes
m = mux.NewRouter()
AddQuestionRoutes(m)
//The response recorder used to record HTTP responses
respRec = httptest.NewRecorder()
}
func TestGet400(t *testing.T) {
//Testing get of non existent question type
req, err = http.NewRequest("GET", "/questions/1/SC", nil)
if err != nil {
t.Fatal("Creating 'GET /questions/1/SC' request failed!")
}
m.ServeHTTP(respRec, req)
if respRec.Code != http.StatusBadRequest {
t.Fatal("Server error: Returned ", respRec.Code, " instead of ", http.StatusBadRequest)
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行此测试时,我可以404想到,因为请求没有正确路由.
当我从浏览器测试这个GET路由时,它会返回一个,400所以我确定测试设置的方式存在问题.
这里使用init()是可疑的.它只作为程序初始化的一部分执行一次.相反,也许是这样的:
func setup() {
//mux router with added question routes
m = mux.NewRouter()
AddQuestionRoutes(m)
//The response recorder used to record HTTP responses
respRec = httptest.NewRecorder()
}
func TestGet400(t *testing.T) {
setup()
//Testing get of non existent question type
req, err = http.NewRequest("GET", "/questions/1/SC", nil)
if err != nil {
t.Fatal("Creating 'GET /questions/1/SC' request failed!")
}
m.ServeHTTP(respRec, req)
if respRec.Code != http.StatusBadRequest {
t.Fatal("Server error: Returned ", respRec.Code, " instead of ", http.StatusBadRequest)
}
}
Run Code Online (Sandbox Code Playgroud)
在每个适当的测试用例的开头调用setup()的地方.您的原始代码与其他测试共享相同的respRec,这可能会污染您的测试结果.
如果您需要一个提供更多功能的测试框架,例如setup/teardown fixture,请参阅gocheck等软件包.
| 归档时间: |
|
| 查看次数: |
9984 次 |
| 最近记录: |