我有以下按预期工作的功能。现在我想为它运行一个单元测试。
func httpClient(cc []string,method http) ([]byte, error) {
httpClient := http.Client{}
req, err := http.NewRequest(http.MethodPost, c[0]+"/oauth/token", nil)
if err != nil {
fmt.error(err)
}
//Here we are passing user and password
req.SetBasicAuth(c[1], c[2])
res, err := httpClient.Do(req)
if err != nil {
fmt.error(err)
}
val, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.error(err)
}
defer res.Body.Close()
return val, nil
}
问题是我需要一些东西来伪造 http 调用,我尝试了以下方法,更改方法签名并将方法和 url 作为参数。问题是我不知道如何伪造该POST方法
这是更改后的代码,使测试更容易
func httpClient(cc []string, method string, url string) ([]byte, error) {
httpClient := http.Client{}
req, err := http.NewRequest(method, url, nil)
if err != nil {
return nil, errors.Wrap(err, "failed to execute http request")
}
//Here we are passing user and password
req.SetBasicAuth(cc[1], cc[2])
res, err := httpClient.Do(req)
if err != nil {
fmt.error(err)
}
val, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.error(err)
}
defer res.Body.Close()
return val, nil
}
这是我尝试的测试,但仍然无法正常工作,因为我需要以某种方式伪造post 方法
func Test_httpClient(t *testing.T) {
type args struct {
params []string
method string
url string
}
tests := []struct {
name string
args args
want []byte
wantErr bool
}{
{
name: "httpCallTest",
args:{{"fakeuser", "fakepasswword"},{"post"},{"/any/url"}},
want: nil,
wantErr: false,
},
}
慕工程0101907
墨色风雨
相关分类