我有这个函数,我需要在测试中模拟,我能够用 http mock package 模拟它,但现在我有调用方法的函数,在这里我不能使用 http HttpReqmock package 我读过关于依赖注入并尝试了一些但我无法完全做到,
这是功能
type params struct {
cs string
ci string
method string
url string
}
// I added this struct but not sure if it's needed ... probably for test purpose but not sure how to use it.
type Impl struct {
client *http.Client
}
func (i *Impl) HttpReq(p *params) ([]byte, error) {
httpClient := i.client
req, err := http.NewRequest(p.method, p.url, nil)
if err != nil {
fmt.Sprintf(err)
}
req.SetBasicAuth(p.cs, p.ci)
res, err := httpClient.Do(req)
if err != nil {
fmt.Sprintf(err)
}
t, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Sprintf(err)
}
defer res.Body.Close()
return t, nil
}
这是我试过的
我创建了界面
type Req interface {
HttpReq(params) ([]byte, error)
}
现在我创建了一个包含接口的结构
type Service struct {
req Req
}
这是我需要测试的功能
func (c *Service) execute(cli Connection , args []string) (error, []byte) {
sk, err := c.doSomthing(cli, args)
sc, err := c.doSometing2(serviceK, []string{"url", "cl", "ct"})
cc := strings.Fields(serviceCredentials)
// ----------Here is what I need to mock ----------
t, err := c.req.HttpReq(params{cs: cc[1],
ci: cc[2],
method: http.MethodPost,
url: cc[0],})
return err, t
}
知道如何为此功能运行测试吗???我为此苦苦挣扎。
Cats萌萌
宝慕林4294392
相关分类