이 API를 구축하면서 인증, 로깅, Dockerization 등을 다루었습니다. 하지만 아직 논의하지 않은 한 가지는 테스트입니다! API를 프로덕션 준비 상태로 만들려면 견고한 단위 테스트를 추가하는 것이 중요합니다. 이번 게시물에서는 버그를 조기에 발견하고 고품질 코드를 출시할 수 있도록 Go에서 단위 테스트의 기본 사항을 살펴보겠습니다.
단위 테스트는 코드베이스의 각 부분이 예상대로 작동하는지 확인하는 데 도움이 됩니다. 이는 버그, 회귀 및 기타 불쾌한 놀라움에 대한 첫 번째 방어선입니다. Go에 내장된 테스트 라이브러리를 사용하면 다음과 같은 테스트를 빠르게 설정할 수 있습니다.
시작할 준비가 되셨나요? 뛰어 들어보세요! ?
Go의 테스트 프레임워크는 간단하고 언어에 바로 통합되어 있습니다. _test.go 접미사를 붙여 이름을 지정하여 테스트 파일을 생성할 수 있습니다. main.go의 간단한 함수를 테스트하는 것부터 시작하겠습니다:
// main.go package main func Add(a, b int) int { return a b }
이제 main_test.go라는 파일을 만들고 다음 코드를 추가하세요.
// main_test.go package main import "testing" func TestAdd(t *testing.T) { result := Add(2, 3) expected := 5 if result != expected { t.Errorf("Add(2, 3) = %d; want %d", result, expected) } }
테스트를 실행하려면 다음을 사용하세요.
go test
모든 것이 제대로 작동하면 확인 메시지가 표시됩니다. ?
이제 HTTP 핸들러 중 하나에 대한 테스트를 작성해 보겠습니다. Go의 httptest 패키지를 사용하여 모의 HTTP 요청 및 응답 레코더를 생성하겠습니다.
// main_test.go package main import ( "net/http" "net/http/httptest" "testing" ) func TestGetBooksHandler(t *testing.T) { req, err := http.NewRequest("GET", "/books", nil) if err != nil { t.Fatal(err) } rr := httptest.NewRecorder() handler := http.HandlerFunc(getBooks) handler.ServeHTTP(rr, req) if status := rr.Code; status != http.StatusOK { t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusOK) } }
이 방법을 사용하면 전체 서버를 가동하지 않고도 핸들러를 격리하고 테스트할 수 있습니다. ?
Go에는 테스트 적용 범위를 확인하는 방법이 내장되어 있습니다. 테스트에 포함된 코드의 비율을 확인하려면 다음을 실행하세요.
go test -cover
더 자세한 내용을 보려면 HTML 보고서를 생성하세요.
go test -coverprofile=coverage.out go tool cover -html=coverage.out
생성된 HTML 파일을 열어서 코드의 어느 부분이 다루고 있는지 시각화하세요. 추가 테스트가 필요한 곳을 확인할 수 있는 환상적인 방법입니다.
외부 서비스(예: 데이터베이스 또는 외부 API 호출)에 의존하는 기능을 테스트할 때 인터페이스를 사용하여 해당 종속성을 모의할 수 있습니다.
// Define a simple interface for our database type Database interface { GetBooks() ([]Book, error) } // Implement a mock database type MockDatabase struct{} func (m MockDatabase) GetBooks() ([]Book, error) { return []Book{{Title: "Mock Book"}}, nil }
인터페이스를 사용하면 테스트 중에 실제 종속성을 모의 종속성으로 바꿀 수 있습니다. 이를 통해 테스트를 빠르고, 격리되고, 반복 가능하게 유지합니다.
이제 단위 테스트 작성을 시작했으므로 API의 다른 부분에 테스트를 추가해 보세요! ? 다음 주에는 변경 사항이 있을 때마다 이러한 테스트가 자동으로 실행될 수 있도록 CI/CD 파이프라인을 통합하는 방법을 살펴보겠습니다. 계속 지켜봐주세요!
질문: 가장 좋아하는 테스트 도구나 기술은 무엇입니까? 아래에 댓글을 남겨주세요. 다른 Go 개발자들이 테스트에 어떻게 접근하는지 듣고 싶습니다!
이러한 기본 사항을 통해 Go API를 더욱 안정적으로 만드는 견고한 테스트를 효과적으로 작성할 수 있습니다. 더 많은 테스트 팁과 고급 기술을 알아보려면 향후 게시물을 계속 지켜봐 주시기 바랍니다. 즐거운 테스트 되세요! ?
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3