//go:build integration package db_test import ( "context" "testing" "time" "github.com/stretchr/testify/require" tcpg "github.com/testcontainers/testcontainers-go/modules/postgres" mydb "github.com/yan1h/agent-coding-workflow/internal/infra/db" ) // TestNewPool_ConnectsAndPings 用 testcontainers 起一个真实的 Postgres, // 验证 NewPool 能连上、HealthCheck 能 Ping 通。 // 仅在 integration build tag 下编译/运行;本地 `go test ./...` 会跳过。 func TestNewPool_ConnectsAndPings(t *testing.T) { ctx := context.Background() // v0.42.0 起 RunContainer 已 Deprecated,统一用 Run(ctx, image, opts...)。 container, err := tcpg.Run(ctx, "postgres:16-alpine", tcpg.WithDatabase("acw"), tcpg.WithUsername("acw"), tcpg.WithPassword("acw"), ) require.NoError(t, err) t.Cleanup(func() { _ = container.Terminate(ctx) }) dsn, err := container.ConnectionString(ctx, "sslmode=disable") require.NoError(t, err) pool, err := mydb.NewPool(ctx, dsn) require.NoError(t, err) t.Cleanup(pool.Close) hctx, cancel := context.WithTimeout(ctx, 2*time.Second) defer cancel() require.NoError(t, mydb.HealthCheck(hctx, pool)) }