learning_go/go-code-samples/mock-testing/fetchuser/fetchuser_httptest_test.go
2025-12-20 10:21:45 +03:00

36 lines
788 B
Go

package fetchuser
import (
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
)
func TestProcessUser_HttpTest(t *testing.T) {
user := User{ID: 1, Name: "Alice"}
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
userJSON, _ := json.Marshal(user)
n, err := w.Write(userJSON)
if err != nil {
t.Errorf("test server: unexpected error after writing %d bytes: %v", n, err)
}
}))
defer ts.Close()
fetcher := &RealAPIFetcher{
ApiURL: ts.URL, // mock URL provided by httptest
}
http.DefaultClient = ts.Client() // client provided by httptest
result, err := ProcessUser(fetcher, 1)
if err != nil {
t.Errorf("unexpected error: %v", err)
}
if result != user {
t.Errorf("expected user: %v, got: %v", user, result)
}
}