Go에서 HTTP 서버 라이브 테스트
질문:
라이브 테스트를 수행하려면 어떻게 해야 하나요? 완전한 라우터의 컨텍스트 내에서 특정 HTTP 요청 방법에 올바르게 응답하는지 확인하기 위해 HTTP 서버 핸들러를 사용하시겠습니까?
답변:
실시간 테스트를 수행하려면 HTTP 서버인 경우 net/http/httptest.Server 유형을 활용합니다. 이 접근 방식에는 문제의 라우터를 활용하는 라이브 테스트 서버를 만드는 것이 포함됩니다. 그런 다음 이 테스트 서버에 HTTP 요청을 보내고 예상 결과에 대해 응답을 검증할 수 있습니다.
코드 예:
다음 코드는 httptest를 사용하는 방법을 보여줍니다. .라이브 테스트용 서버:
<code class="go">import ( "net/http" "net/http/httptest" "testing" ) func TestIndex(t *testing.T) { // Initialize the router, e.g., a Gorilla mux router as in the question. router := mux.NewRouter() router.HandleFunc("/", views.Index).Methods("GET") // Create a test server using the router. ts := httptest.NewServer(router) defer ts.Close() // Define a function to construct new HTTP requests. newreq := func(method, url string, body io.Reader) *http.Request { r, err := http.NewRequest(method, url, body) if err != nil { t.Fatal(err) } return r } tests := []struct { name string r *http.Request }{ {name: "1: testing get", r: newreq("GET", ts.URL+"/", nil)}, {name: "2: testing post", r: newreq("POST", ts.URL+"/", nil)}, // reader argument required for POST } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { resp, err := http.DefaultClient.Do(tt.r) defer resp.Body.Close() if err != nil { t.Fatal(err) } // Perform validations on the response body, headers, etc. }) } }</code>
참고: 이 접근 방식은 Gorilla mux, net/http.ServeMux 및 http를 포함하여 http.Handler 인터페이스를 구현하는 모든 라우터에 적용할 수 있습니다. DefaultServeMux.
위 내용은 Go에서 본격적인 라우터를 사용하여 HTTP 서버 핸들러를 실시간 테스트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!