У меня есть эта функция, которую мне нужно смоделировать в тесте, я смогла смоделировать ее, как и ожидалось, с помощью пакета http mock, но теперь у меня есть функция, которая вызывает метод HttpReq
, и здесь я не могу использовать http mockпакет, который я прочитал о внедрении зависимостей и попробовал что-то, но я не смог сделать это полностью,
Это функция
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
}
Любая идея, как я могу запустить тест для этой функции ???Я много с этим борюсь.