我正在嘗試模擬在我的 Go 代碼中的 API 函數(shù)調(diào)用中使用的 HTTP 客戶端。import ( "internal.repo/[...]/http" "encoding/json" "strings" "github.com/stretchr/testify/require")func CreateResource(t *testing.T, url string, bodyReq interface{}, username string, password string, resource string) []byte { bodyReqJSON, err := json.Marshal(bodyReq) if err != nil { panic(err) } headers := make(map[string]string) headers["Content-Type"] = "application/json" logger.Logf(t, "*************************** CREATE a temporary test %s ***************************", resource) // this func below should be mocked statusCode, body := http.POST(t, url, bodyReqJSON, headers, username, password) require.Equal(t, statusCode, 201, "******ERROR!! A problem occurred while creating %s. Body: %s******", resource, strings.TrimSpace(string(body))) return body}我想模擬我的http.POST函數(shù),它是內(nèi)部 HTTP 包的一部分,這樣我就不需要實(shí)際進(jìn)行在線調(diào)用,并隔離離線測試。是否有另一種方法可以依賴注入實(shí)現(xiàn)假設(shè) HTTP 接口的模擬結(jié)構(gòu)?你會怎么做這樣的事情?
1 回答

慕神8447489
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個贊
這是解決方案
import (
? ? "net/http"
? ? "net/http/httptest"
? ? "testing"
? ? "github.com/stretchr/testify/assert"
)
func TestCreateResource(t *testing.T) {
? ? t.Run("successful", func(t *testing.T) {
? ? ? ? server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
? ? ? ? ? ? w.WriteHeader(201)
? ? ? ? }))
? ? ? ? defer server.Close()
? ? ? ? o := CreateResource(t, server.URL, nil, "admin", "password", "resource")
? ? ? ? assert.Equal(t, []byte{}, o)
? ? })
}
- 1 回答
- 0 關(guān)注
- 133 瀏覽
添加回答
舉報
0/150
提交
取消