GO · 테스트
통합 테스트
빌드 태그와 환경 변수로 통합 테스트를 분리합니다. 실제 DB나 외부 서비스와 연동합니다.
테스트중급integration-testbuild-tagskipdatabase
핵심 설명
빌드 태그와 환경 변수로 통합 테스트를 분리합니다. 실제 DB나 외부 서비스와 연동합니다.
Go code
package main
import (
"fmt"
"os"
"testing"
)
// 통합 테스트 스킵 헬퍼
func skipIfShort(t *testing.T) {
t.Helper()
if testing.Short() {
t.Skip("통합 테스트: -short 모드에서 건너뜀")
}
}
func skipIfNoEnv(t *testing.T, key string) {
t.Helper()
if os.Getenv(key) == "" {
t.Skipf("통합 테스트: %s 환경 변수 필요", key)
}
}
func TestDatabaseIntegration(t *testing.T) {
skipIfShort(t)
skipIfNoEnv(t, "TEST_DB_URL")
// dsn := os.Getenv("TEST_DB_URL")
// db, err := sql.Open("postgres", dsn)
// ...실제 DB 테스트
t.Run("CreateUser", func(t *testing.T) {
// DB에 사용자 생성 후 조회
})
t.Run("Transaction", func(t *testing.T) {
// 트랜잭션 테스트
})
}
// 파일 상단에 빌드 태그 사용 (Go 1.17+):
// //go:build integration
func main() {
fmt.Println("통합 테스트 실행:")
fmt.Println(" go test -v # 단위만")
fmt.Println(" go test -v -short # 빠른 테스트만")
fmt.Println(" go test -v -tags integration # 통합 포함")
}학습 팁
testing.Short()와 t.Skip으로 느린 통합 테스트를 빠른 CI에서 건너뛸 수 있습니다.
주의할 점
통합 테스트에서 공유 DB를 사용하면 테스트 간 간섭이 발생합니다. 각 테스트마다 트랜잭션을 사용하고 롤백하세요.
자주 묻는 질문
통합 테스트란 무엇인가요?
빌드 태그와 환경 변수로 통합 테스트를 분리합니다. 실제 DB나 외부 서비스와 연동합니다.
통합 테스트 학습 시 주의할 점은 무엇인가요?
통합 테스트에서 공유 DB를 사용하면 테스트 간 간섭이 발생합니다. 각 테스트마다 트랜잭션을 사용하고 롤백하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.