04/02/2020 - GO
Uygulamanız başka bir servisi aramak için bir HTTP istemcisi kullanıyorsa ve servisi test ortamında çağırmak istemiyorsanız aşağıdaki örneği kullanabilirsiniz. HTTP istemciniz, sahte servisi çağırması için servisi taklit eder.
package pkg
import "net/http"
type Consumer struct {
ServiceAddress string
}
func (c Consumer) GetUsers() (*http.Response, error) {
req, err := http.NewRequest(http.MethodGet, c.ServiceAddress + "/server/api/v1/users", nil)
if err != nil {
return nil, err
}
client := http.Client{}
res, err := client.Do(req)
if err != nil {
return nil, err
}
return res, nil
}
package pkg
import (
"io/ioutil"
"net/http"
"net/http/httptest"
"testing"
)
func TestConsumer_GetUsers(t *testing.T) {
srv := serverMock()
defer srv.Close()
consumer := Consumer{ServiceAddress: srv.URL}
res, err := consumer.GetUsers()
if err != nil {
t.Error(err)
}
body, err := ioutil.ReadAll(res.Body)
if err != nil {
t.Error(err)
}
res.Body.Close()
if http.StatusOK != res.StatusCode {
t.Error("expected", http.StatusOK, "got", res.StatusCode)
}
if "mock server responding" != string(body) {
t.Error("expected mock server responding got", string(body))
}
}
func serverMock() *httptest.Server {
handler := http.NewServeMux()
handler.HandleFunc("/server/api/v1/users", usersMock)
srv := httptest.NewServer(handler)
return srv
}
func usersMock(w http.ResponseWriter, r *http.Request) {
_, _ = w.Write([]byte("mock server responding"))
}