PHpullh
학습 라이브러리/Go/통합 테스트

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를 사용하면 테스트 간 간섭이 발생합니다. 각 테스트마다 트랜잭션을 사용하고 롤백하세요.