登录
首页 >  Golang >  Go问答

无法记录的日志输出进行测试

来源:stackoverflow

时间:2024-03-12 11:18:27 160浏览 收藏

今天golang学习网给大家带来了《无法记录的日志输出进行测试》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

我正在尝试测试我的 userregister 功能,它需要 http 请求。

如果用户输入已经存在的电子邮件,userregister 将返回错误日志(使用 logrus)。

logs "github.com/sirupsen/logrus"

func userregister(res http.responsewriter, req *http.request) {

    requestid := req.formvalue("uid")
    email := req.formvalue("email")

    logs.withfields(logs.fields{
        "service":  "user service",
        "package":  "register",
        "function": "userregister",
        "uuid":     requestid,
        "email":    email,
    }).info("received data to insert to users table")

    // check user entered new email address
    hasaccount := checkemail.checkmail(email, requestid) // returns true/false

    if hasaccount != true { // user doesn't have an account

        db := dbconn()

        // inserting token to login_token table
        insertuser, err := db.prepare("insert into users (email) values(?)")
        if err != nil {
            logs.withfields(logs.fields{
                "service":  "user service",
                "package":  "register",
                "function": "userregister",
                "uuid":     requestid,
                "error":    err,
            }).error("couldnt prepare insert statement for users table")
        }
        insertuser.exec(email)
        defer db.close()
        return
    } // user account created

    logs.withfields(logs.fields{
        "service":  "user service",
        "package":  "register",
        "function": "userregister",
        "uuid":     requestid,
        "email":    email,
    }).error("user has an account for this email")


}

在我的测试模块中,我使用了以下内容。

func TestUserRegister(t *testing.T) {
    rec := httptest.NewRecorder()
    req, _ := http.NewRequest("POST", "http://localhost:7071/[email protected]&uid=sjfkjsdkf9w89w83490w", nil)

    UserRegister(rec, req)

    expected := "User has an account for this email"

    res := rec.Result()
    content, err := ioutil.ReadAll(res.Body)

    if err != nil {
        t.Error("Couldnt read body", err)
    }

    val, err := strconv.Atoi(string(bytes.TrimSpace(content)))

    if err != nil {
        log.Println("Error parsing response", err)
    }
    if string(val) != expected { 
        t.Errorf("Expected %s, got %s", expected, string(content))
    }

}

结果:解析响应 strconv.atoi 时出错:解析“”:语法无效

为什么响应不能转换?

已检查的线程:

为什么这个将字符串转换为整数的 golang 代码失败。

编辑:@chmike 回答后。

这是微服务的一部分。所有响应都写入 api-gateway。使用函数。

但在这里我只想执行单元测试并检查我的 userregister 是否按预期工作。


解决方案


函数 UserRegister 永远不会写入 res 或设置状态。因此,您从 TestUserRegister 中的 res 得到一个空字符串。 content 是一个空字符串,并且使用 Atoi 将空字符串转换为整数失败,因为没有要转换的整数。

我只能解释发生了什么。我无法告诉您如何解决问题,因为您没有解释您想要做什么或在问题中得到什么。

您正在阅读的http响应不是对您的请求的响应。您创建一个响应并期望其中包含一些内容。它不会。因此,您最终尝试从空字符串创建一个整数。

查看一些示例,看看真正的响应来自哪里。 https://golang.org/pkg/net/http

今天关于《无法记录的日志输出进行测试》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>