Go에서 HTTP 핸들러 테스트
7910 단어 gotestingprogramming
소개
이 예제에서는
httptest
라이브러리를 사용하여 단위 테스트를 만들고 http 핸들러에 대한 테스트 범위를 만드는 방법을 살펴봅니다.Go에서 http 핸들러를 테스트하는 방법은 무엇입니까?
따라서 모든 핸들러 http를 테스트할 수 있으므로 http 상태 코드, 헤더, 본문 등과 같은 핸들러 응답을 저장할 수 있는 구조가 필요합니다.
패키지
httptest
는 핸들러 응답을 저장하는 데 필요한 구조 httptest.ResponseRecorder
를 제공합니다.// NewRecorder returns an initialized ResponseRecorder.
func NewRecorder() *ResponseRecorder {
return &ResponseRecorder{
HeaderMap: make(http.Header),
Body: new(bytes.Buffer),
Code: 200,
}
}
샘플 API
샘플 API에는 숫자가 소수인지 확인하는
/check-is-prime
라는 핸들러가 있습니다.코드:
첫 번째 테스트
테스트 논리는 매우 간단합니다. 각 테스트에 대해 HTTP 요청을 작성한 다음 응답을 비교합니다.
<script id="gist-ltag"src="https://gist.github.com/nicolascb/f1677d22b80af91e31afd6c931ee0065.js?file=1_handlers_test.go"/>
더 많은 테스트 추가
테스트에서 테이블 디자인을 사용하면 더 많은 사례를 쉽게 추가할 수 있습니다.
{
name: "must return http.StatusOk and true to prime number (7)",
args: func(*testing.T) args {
req, err := http.NewRequest("GET", "/check-is-prime", nil)
if err != nil {
t.Fatalf("fail to create request: %s", err.Error())
}
q := req.URL.Query()
q.Add("number", "7")
req.URL.RawQuery = q.Encode()
return args{
req: req,
}
},
wantCode: http.StatusOK,
wantBody: "true",
},
{
name: "must return http.StatusOk and false because number (1) is not prime",
args: func(*testing.T) args {
req, err := http.NewRequest("GET", "/check-is-prime", nil)
if err != nil {
t.Fatalf("fail to create request: %s", err.Error())
}
q := req.URL.Query()
q.Add("number", "1")
req.URL.RawQuery = q.Encode()
return args{
req: req,
}
},
wantCode: http.StatusOK,
wantBody: "false",
},
전체 코드:
<script id="gist-ltag"src="https://gist.github.com/nicolascb/d0ca68cd6951fce74f82a14084597869.js?file=handlers_test.go"/>
결론
Go 표준 라이브러리에 이러한 유틸리티가 있으면 테스트를 만들고 유지 관리할 때 많은 도움이 됩니다. 우리는 패키지httptest
로 실제로 보았다.
또 다른 중요한 점은 mux 생성을 격리하는 것입니다. 이는 테스트에서 핸들러를 호출하는 데 필요합니다.
Reference
이 문제에 관하여(Go에서 HTTP 핸들러 테스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nicolascb/testing-http-handlers-in-go-2opl텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)