GO · 테스트
testcontainers 패턴
Docker 컨테이너를 테스트에서 자동으로 시작/종료합니다. 실제 DB, Redis 등과 통합 테스트합니다.
테스트고급testcontainersdockerintegrationdatabase
핵심 설명
Docker 컨테이너를 테스트에서 자동으로 시작/종료합니다. 실제 DB, Redis 등과 통합 테스트합니다.
Go code
package main
import (
"context"
"fmt"
"testing"
)
// testcontainers-go 사용 예시
// import "github.com/testcontainers/testcontainers-go"
type TestDB struct {
Host string
Port int
// container testcontainers.Container
}
func SetupPostgres(t *testing.T) *TestDB {
t.Helper()
// ctx := context.Background()
// req := testcontainers.ContainerRequest{
// Image: "postgres:16",
// ExposedPorts: []string{"5432/tcp"},
// Env: map[string]string{
// "POSTGRES_PASSWORD": "test",
// "POSTGRES_DB": "testdb",
// },
// WaitingFor: wait.ForListeningPort("5432/tcp"),
// }
// container, _ := testcontainers.GenericContainer(ctx, req)
// host, _ := container.Host(ctx)
// port, _ := container.MappedPort(ctx, "5432")
db := &TestDB{Host: "localhost", Port: 5432}
t.Cleanup(func() {
fmt.Println("컨테이너 정리")
// container.Terminate(ctx)
})
return db
}
func TestWithPostgres(t *testing.T) {
if testing.Short() { t.Skip("통합 테스트") }
db := SetupPostgres(t)
fmt.Printf("테스트 DB: %s:%d\n", db.Host, db.Port)
}
func main() {
_ = context.Background()
fmt.Println("testcontainers: Docker 기반 통합 테스트")
}학습 팁
t.Cleanup으로 컨테이너를 정리하면 테스트 실패 시에도 자동으로 정리됩니다.
주의할 점
각 테스트마다 컨테이너를 시작하면 느립니다. TestMain에서 한 번 시작하고 여러 테스트에서 공유하세요.
자주 묻는 질문
testcontainers 패턴란 무엇인가요?
Docker 컨테이너를 테스트에서 자동으로 시작/종료합니다. 실제 DB, Redis 등과 통합 테스트합니다.
testcontainers 패턴 학습 시 주의할 점은 무엇인가요?
각 테스트마다 컨테이너를 시작하면 느립니다. TestMain 에서 한 번 시작하고 여러 테스트에서 공유하세요.