1 回答
TA贡献1833条经验 获得超4个赞
您可以创建一个http.ResponseWriter
也实现 的模拟http.Pusher
,并在测试期间通过它。
这是适合您的可测试函数的简单实现:
type pusher struct {
http.ResponseWriter
err error // err to return from Push()
target string
opts *http.PushOptions
}
func (p *pusher) Push(target string, opts *http.PushOptions) error {
// record passed arguments for later inspection
p.target = target
p.opts = opts
return p.err
}
测试函数示例:
func TestPush(t *testing.T) {
resource := "static/css/main.css"
p := &pusher{}
err := push(p, resource)
if err != p.err {
t.Errorf("Expected: %v, got: %v", p.err, err)
}
if resource != p.target {
t.Errorf("Expected: %v, got: %v", p.target, resource)
}
}
请注意,这个简单的pusher嵌入http.ResponseWriter类型将使其本身成为一个http.ResponseWriter(它将成为pusherImplement http.ResponseWriter)。在测试过程中,我们保留了该字段nil,因为可测试push()函数没有使用其中的任何内容。如果您的真实函数会调用它的方法,例如ResponseWriter.Header(),那当然会导致运行时恐慌。在这种情况下,您也必须提供有效的信息http.ResponseWriter,例如:
p := &pusher{ResponseWriter: httptest.NewRecorder()}
- 1 回答
- 0 关注
- 210 浏览
添加回答
举报