httptest를 사용하여 Go에서 HTTP 호출을 테스트하는 방법
소개
단위 테스트는 소프트웨어 개발의 중요한 측면이며 Go 프로그램의 경우 httptest 패키지는 HTTP 호출을 테스트하는 데 유용한 도구를 제공합니다. 이 기사에서는 httptest를 사용하여 HTTP 요청을 하는 Go 코드에 대한 단위 테스트를 작성하는 방법을 보여줍니다.
과제
다음 Go 코드를 고려하세요.
package main import ( "encoding/json" "fmt" "io/ioutil" "log" "net/http" "time" ) type twitterResult struct { Results []struct { Text string `json:"text"` Ids string `json:"id_str"` Name string `json:"from_user_name"` Username string `json:"from_user"` UserId string `json:"from_user_id_str"` } } var ( twitterUrl = "http://search.twitter.com/search.json?q=%23UCL" pauseDuration = 5 * time.Second ) func retrieveTweets(c chan<- *twitterResult) { for { resp, err := http.Get(twitterUrl) if err != nil { log.Fatal(err) } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) r := new(twitterResult) //or &twitterResult{} which returns *twitterResult err = json.Unmarshal(body, &r) if err != nil { log.Fatal(err) } c <- r time.Sleep(pauseDuration) } } func displayTweets(c chan *twitterResult) { tweets := <-c for _, v := range tweets.Results { fmt.Printf("%v:%v\n", v.Username, v.Text) } } func main() { c := make(chan *twitterResult) go retrieveTweets(c) for { displayTweets(c) } }
목표는 트위터 검색에서 트윗을 검색하기 위해 만들어진 HTTP 요청을 테스트하는 데 초점을 맞춰 이 코드에 대한 단위 테스트를 작성하는 것입니다. API.
httptest를 사용한 솔루션
httptest 패키지는 응답 테스트와 서버 테스트라는 두 가지 테스트 유형을 제공합니다. 이 시나리오에서는 서버 테스트가 더 적합합니다. 진행 방법은 다음과 같습니다.
func TestRetrieveTweets(t *testing.T){ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") fmt.Fprintln(w, `{"fake twitter json string"}`) })) defer ts.Close()
이 코드는 HTTP 요청에 응답하는 테스트 서버를 생성합니다. 사전 정의된 JSON 응답.
twitterUrl = ts.URL
원래 코드에서 twitterUrl 변수는 실제 Twitter API 엔드포인트 대신 테스트 서버의 URL을 가리키도록 수정되었습니다.
c := make(chan *twitterResult)
채널은 원본 코드에서 테스트 고루틴과 기본 고루틴 간의 통신에 사용됩니다.
go retrieveTweets(c)
이 goroutine은 테스트 서버에서 트윗을 검색하는 프로세스를 시작합니다.
tweet := <-c if tweet != expected1 { t.Fail() } tweet = <-c if tweet != expected2 { t.Fail() }
테스트 고루틴은 채널의 트윗을 확인하고 예상 결과와 일치하는지 확인합니다.
추가 고려 사항
테스트에서는 HTTP 응답의 내용을 확인하지 않는다는 점에 주목할 필요가 있습니다. 보다 철저한 테스트를 위해서는 실제 응답과 예상 응답을 비교해야 합니다. 또한 테스트 서버는 실제 Twitter API를 정확하게 시뮬레이션하기 위해 보다 현실적인 응답 구조를 반환해야 합니다.
위 내용은 `httptest` 패키지를 사용하여 Go에서 HTTP 호출을 단위 테스트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!