| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package main
- import (
- "fmt"
- "net/http"
- "net/http/httptest"
- "strings"
- "testing"
- "time"
- )
- func TestGreetingHandler(t *testing.T) {
- tests := []struct {
- name string
- method string
- url string
- wantStatus int
- }{
- {name: "valid", method: http.MethodGet, url: "/hello?name=Go", wantStatus: http.StatusOK},
- {name: "missing_name", method: http.MethodGet, url: "/hello", wantStatus: http.StatusBadRequest},
- {name: "wrong_method", method: http.MethodPost, url: "/hello?name=Go", wantStatus: http.StatusMethodNotAllowed},
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- request := httptest.NewRequest(tt.method, tt.url, nil)
- response := httptest.NewRecorder()
- greetingHandler(response, request)
- if response.Code != tt.wantStatus {
- t.Errorf("状态码=%d,期望=%d", response.Code, tt.wantStatus)
- }
- if tt.wantStatus == http.StatusOK && !strings.Contains(response.Body.String(), "你好,Go!") {
- t.Errorf("响应内容不符合预期:%s", response.Body.String())
- }
- })
- }
- }
- func TestFetchGreeting(t *testing.T) {
- mux := http.NewServeMux()
- mux.HandleFunc("/hello", greetingHandler)
- server := httptest.NewServer(mux)
- defer server.Close()
- client := &http.Client{Timeout: 2 * time.Second}
- got, err := fetchGreeting(client, server.URL, "小 朱&Go")
- if err != nil {
- t.Fatalf("请求失败:%v", err)
- }
- if got.Message != "你好,小 朱&Go!" {
- t.Errorf("消息=%q", got.Message)
- }
- if _, err := fetchGreeting(client, server.URL, ""); err == nil {
- t.Error("空姓名应导致客户端返回错误")
- }
- }
- func TestFetchRejectsInvalidResponse(t *testing.T) {
- tests := []struct {
- name string
- body string
- }{
- {name: "invalid_json", body: "not json"},
- {name: "oversized", body: strings.Repeat("a", 64*1024+1)},
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- fmt.Fprint(w, tt.body)
- }))
- defer server.Close()
- client := &http.Client{Timeout: 2 * time.Second}
- if _, err := fetchGreeting(client, server.URL, "Go"); err == nil {
- t.Error("无效响应应返回错误")
- }
- })
- }
- }
|