How to mock http.Client Do method
Any struct with a method matching the signature you have in your interface will implement the interface. For example, you could create a struct ClientMock
type ClientMock struct {
}
with the method
func (c *ClientMock) Do(req *http.Request) (*http.Response, error) {
return &http.Response{}, nil
}
You could then inject this ClientMock
struct into your GetOverview
func. Here's an example in the Go Playground.
The net/http/httptest
package is your best friend:
// generate a test server so we can capture and inspect the request
testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
res.WriteHeader(scenario.expectedRespStatus)
res.Write([]byte("body"))
}))
defer func() { testServer.Close() }()
req, err := http.NewRequest(http.MethodGet, testServer.URL, nil)
assert.NoError(t, err)
res, err := http.DefaultClient.Do(req)
assert.NoError(t, err)
assert.Equal(t, scenario.expectedRespStatus, res.StatusCode, "status code should match the expected response")