为了账号安全,请及时绑定邮箱和手机立即绑定

使用 ExampleTest 进行测试 - 预期输出不匹配

使用 ExampleTest 进行测试 - 预期输出不匹配

Go
慕哥6287543 2023-06-05 19:33:41
Running tool: /usr/local/go/bin/go test -timeout 30s -run ^(ExampleBuild)$--- FAIL: ExampleBuild (0.00s)got:POST localhost/status?t=1 HTTP/1.1Content-Type: application/jsonwant:POST localhost/status?t=1 HTTP/1.1Content-Type: application/jsonFAILexit status 1我正在尝试使用 Example 方法编写测试。我创建了一个带有标头(Content-Type:application/json)、查询参数 t=1、方法类型 POST 和 URL localhost 的 http 请求。got: 和 want: 中的输出看起来是一样的,还检查了空白字符。无法弄清楚这两者之间有什么区别。无法弄清楚我在这里错过了什么。import (   "fmt"   "net/http"   "net/http/httputil")func ExampleBuild() {    req, err := http.NewRequest(http.MethodPost, "localhost/status?t=1", nil)    req.Header.Add("content-type", "application/json")    if err != nil {        panic(err)    }    str, err := httputil.DumpRequest(req, false)    if err != nil {        panic(err)    }    fmt.Printf("%s", string(str))    // Output:    // POST localhost/status?t=1 HTTP/1.1    // Content-Type: application/json}
查看完整描述

1 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

我认为正在发生的事情是 HTTP 标头的\r\n 换行符。所以这就是httputil.DumpRequest回报。但是您可能正在一台不使用\r\n换行符的机器上编辑这个文件,所以区别就在于此。

成功比较的蛮力方法是:

fmt.Println(strings.Replace(string(str), "\r", "", -1))

它从 HTTP 转储的字符串中删除了“\r”,如果您的编辑器仅使用“\n”来破坏预期输出,它将成功进行比较。

更优雅的解决方案将取决于您的测试环境的细节。


查看完整回答
反对 回复 2023-06-05
  • 1 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信