Go에서 본격적인 라우터를 사용하여 HTTP 서버 핸들러를 실시간 테스트하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-03 04:59:30
원래의
165명이 탐색했습니다.

How to Live Test HTTP Server Handlers with a Full-Fledged Router in Go?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿