所以这个真的很奇怪,我试图获得一个呈现 JSON 的模拟响应。我的测试是这样的:

import (
    "fmt"
    "net/http"
    "net/http/httptest"
    "reflect"
    "strings"
    "testing"
)
...

func TestMessageFromResponse(t *testing.T) {
    mc := MyController{}
    body := "{ \"message\":\"kthxbai\" }"
    w := httptest.NewRecorder()
    w.Write([]byte(body))
    resp := w.Result()
    msg := mc.messageFromResponse(resp)
    if msg != "kthxbai" {
        t.Errorf("Expected response body to be kthxbai but was %s", msg)
    }
}

我正在 messageFromResponse 上测试 MyController 方法,但它甚至没有构建。当我在项目目录中运行 go test 时,出现以下错误:
./my_controller_test.go:115: w.Result undefined (type *httptest.ResponseRecorder has no field or method Result)

我还应该提到,我在同一个文件的其他地方成功地使用 httptest.ResponseRecorder 作为编写器 stub ,但是当我尝试访问 Result() 时它只是失败了。

最佳答案

我最初将此作为评论进行了处理,因为我不确定相关性,但为了后代:

在线 godoc 始终引用最新版本。在这种情况下,Result() 方法是在上周才发布的 Go1.7 中添加的。如有疑问,请通过运行 godoc -servergodoc <packagename> 检查您的本地 godoc。

关于unit-testing - httptest.ResponseRecorder 没有字段或方法结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39112511/

10-13 09:22