首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在测试中模拟数据库

如何在测试中模拟数据库
EN

Stack Overflow用户
提问于 2019-10-25 07:00:21
回答 1查看 509关注 0票数 0

我正在写测试,并且能够使用go-sqlmock模拟sql查询的数据库。但是我如何测试处理程序,也就是我无法想象的头。下面是一个示例:

代码语言:javascript
复制
func (env *EnvironmentUser) GetUserHandler (w http.ResponseWriter, r *http.Request) {
    params := mux.Vars(r)
    id, err := strconv.Atoi(params["id"])
    if err != nil {
        w.WriteHeader(http.StatusNotFound)
        return
    }
    user, err := env.Db.GetUser(int(id))
    if err != nil {
        if err == sql.ErrNoRows {
            w.WriteHeader(http.StatusUnauthorized)
        }
        w.WriteHeader(http.StatusInternalServerError)
        return
    }
    json.NewEncoder(w).Encode(user)
    w.WriteHeader(http.StatusOK)
}

GetUser -列表:

代码语言:javascript
复制
row := db.QueryRow("SELECT * FROM users WHERE id = $1", id)
    err = row.Scan(&user.Id, &user.Email, &user.Login, &user.Fullname,
        &user.Password, &user.AccVerified)
    if err != nil {
        return models.User{}, err
    }
    return user, nil

如何检查所有hader的正确性??

EN

回答 1

Stack Overflow用户

发布于 2019-10-25 15:13:49

您的问题应该是如何调用处理程序并记录响应,根据httptest中的示例,您可以使用testify执行以下操作

代码语言:javascript
复制
req, err := http.NewRequest(...)
rec := httptest.NewRecorder()
env.GetUserHandler(rec, req)
require.Equal(t, http.StatusOK, rec.Code)
require.Equal(t, "...", rec.Header().Get("..."))

编辑

如果您只想使用stdlib,那么最后两行变成

代码语言:javascript
复制
if http.StatusOK != rec.Code {
  t.Errorf(...)
}
if "..." != rec.Header().Get("...") {
  t.Errorf(...)
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58550184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档