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 關注
- 248 瀏覽
添加回答
舉報