Go使用httptest测试HTTP接口时,预期值与实际值一致但测试失败
问题原因与排查修复方案
核心问题出在字符串的隐藏换行符:
- 被测试函数中使用了
fmt.Fprintln(w, t.YearDay()),这个函数会自动在输出内容末尾添加一个换行符(\n),所以接口返回的响应体实际是"191\n"(假设当天是第191天)。 - 测试代码里生成的
expected是strconv.Itoa(tme.YearDay()),得到的是不带换行的字符串"191",两者实际并不相等,只是终端输出时换行符不会显示,看起来一致。
排查验证方法
可以在测试代码中添加带引号的打印,直观看到字符串差异:
fmt.Printf("expected: %q, got: %q\n", expected, string(b))
执行测试后会看到类似输出:
expected: "191", got: "191\n"
修复方案(二选一)
方案一:修改被测试函数
把fmt.Fprintln改为fmt.Fprint,避免自动添加换行:func testHandler(w http.ResponseWriter, r *http.Request) { t := time.Now() fmt.Fprint(w, t.YearDay()) }方案二:修改测试代码
在预期值后补上换行符,和接口输出保持一致:expected := strconv.Itoa(tme.YearDay()) + "\n"
内容的提问来源于stack exchange,提问作者Anacardo
相关产品推荐
相关产品推荐

