GET /users/:id
GET
/users/:id
这个业务是根据用户的 id 从数据库取到该用户数据,如果用户不存在则返回404和提示语句。
404
POST /users
POST
/users
201 - Created
500 - Internal Server Error
GET /users/:email
/users/:email
200 - OK
404 - Not Found
handler.go
package handler import ( "net/http" "github.com/labstack/echo" ) type ( User struct { Name string `json:"name" form:"name"` Email string `json:"email" form:"email"` } handler struct { db map[string]*User } ) func (h *handler) createUser(c echo.Context) error { u := new(User) if err := c.Bind(u); err != nil { return err } return c.JSON(http.StatusCreated, u) } func (h *handler) getUser(c echo.Context) error { email := c.Param("email") user := h.db[email] if user == nil { return echo.NewHTTPError(http.StatusNotFound, "user not found") } return c.JSON(http.StatusOK, user) }
handler_test.go
package handler import ( "net/http" "net/http/httptest" "strings" "testing" "github.com/labstack/echo" "github.com/stretchr/testify/assert" ) var ( mockDB = map[string]*User{ "jon@labstack.com": &User{"Jon Snow", "jon@labstack.com"}, } userJSON = `{"name":"Jon Snow","email":"jon@labstack.com"}` ) func TestCreateUser(t *testing.T) { // 设置 e := echo.New() req := httptest.NewRequest(echo.POST, "/", strings.NewReader(userJSON)) req.Header.Set(echo.HeaderContentType, echo.MIMEApplicationJSON) rec := httptest.NewRecorder() c := e.NewContext(req, rec) h := &handler{mockDB} // 断言 if assert.NoError(t, h.createUser(c)) { assert.Equal(t, http.StatusCreated, rec.Code) assert.Equal(t, userJSON, rec.Body.String()) } } func TestGetUser(t *testing.T) { // 设置 e := echo.New() req := httptest.NewRequest(echo.GET, "/", nil) rec := httptest.NewRecorder() c := e.NewContext(req, rec) c.SetPath("/users/:email") c.SetParamNames("email") c.SetParamValues("jon@labstack.com") h := &handler{mockDB} // 断言 if assert.NoError(t, h.getUser(c)) { assert.Equal(t, http.StatusOK, rec.Code) assert.Equal(t, userJSON, rec.Body.String()) } }
f := make(url.Values) f.Set("name", "Jon Snow") f.Set("email", "jon@labstack.com") req := httptest.NewRequest(echo.POST, "/", strings.NewReader(f.Encode())) req.Header.Set(echo.HeaderContentType, echo.MIMEApplicationForm)
c.SetParamNames("id", "email") c.SetParamValues("1", "jon@labstack.com")
q := make(url.Values) q.Set("email", "jon@labstack.com") req := http.NewRequest(echo.POST, "/?"+q.Encode(), nil)
TBD 你可以在这里查看框架自带中间件的测试代码。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8