GO · 테스트
서브테스트
t.Run으로 서브테스트를 만들어 테스트를 구조화합니다. 개별 실행과 병렬 처리가 가능합니다.
테스트중급subtestparalleltestingstructured
핵심 설명
t.Run으로 서브테스트를 만들어 테스트를 구조화합니다. 개별 실행과 병렬 처리가 가능합니다.
Go code
package main
import (
"fmt"
"testing"
)
func TestUserService(t *testing.T) {
// 셋업
// db := setupTestDB(t)
t.Run("Create", func(t *testing.T) {
t.Run("유효한 입력", func(t *testing.T) {
// 테스트 코드
})
t.Run("중복 이메일", func(t *testing.T) {
// 테스트 코드
})
})
t.Run("Find", func(t *testing.T) {
t.Run("존재하는 ID", func(t *testing.T) {
// 테스트 코드
})
t.Run("존재하지 않는 ID", func(t *testing.T) {
// 테스트 코드
})
})
// 병렬 서브테스트
t.Run("Parallel", func(t *testing.T) {
tests := []string{"test1", "test2", "test3"}
for _, name := range tests {
t.Run(name, func(t *testing.T) {
t.Parallel() // 병렬 실행
// 독립적인 테스트
})
}
})
}
func main() {
// go test -v -run TestUserService/Create/유효한_입력
fmt.Println("서브테스트: go test -v -run TestX/SubTest")
}학습 팁
go test -run TestX/SubName으로 특정 서브테스트만 실행할 수 있습니다. 한글 이름도 지원됩니다.
주의할 점
t.Parallel()을 사용할 때 외부 변수를 캡처하면 레이스 컨디션이 발생합니다. Go 1.22+에서는 루프 변수가 안전합니다.
자주 묻는 질문
서브테스트란 무엇인가요?
t.Run 으로 서브테스트를 만들어 테스트를 구조화합니다. 개별 실행과 병렬 처리가 가능합니다.
서브테스트 학습 시 주의할 점은 무엇인가요?
t.Parallel() 을 사용할 때 외부 변수를 캡처하면 레이스 컨디션이 발생합니다. Go 1.22+에서는 루프 변수가 안전합니다.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.