PHpullh
학습 라이브러리/Go/testing 패키지 & 테이블 드리븐 테스트

GO · 테스트

testing 패키지 & 테이블 드리븐 테스트

Go 내장 테스트 프레임워크로 표 기반 테스트를 작성합니다.

테스트중급testingtable-drivent.RunbenchmarkExample

핵심 설명

Go 내장 테스트 프레임워크로 표 기반 테스트를 작성합니다.

Go code

// calculator_test.go
package main

import (
	"testing"
)

func Add(a, b int) int { return a + b }
func Divide(a, b float64) (float64, error) {
	if b == 0 { return 0, fmt.Errorf("division by zero") }
	return a / b, nil
}

// 기본 테스트
func TestAdd(t *testing.T) {
	got  := Add(2, 3)
	want := 5
	if got != want {
		t.Errorf("Add(2,3) = %d; want %d", got, want)
	}
}

// 테이블 드리븐 테스트 (Go 관용구)
func TestAddTable(t *testing.T) {
	tests := []struct {
		name string
		a, b int
		want int
	}{
		{"양수+양수", 2, 3, 5},
		{"음수포함", -1, 1, 0},
		{"둘다음수", -3, -2, -5},
		{"영포함", 0, 5, 5},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			got := Add(tt.a, tt.b)
			if got != tt.want {
				t.Errorf("Add(%d,%d) = %d; want %d",
					tt.a, tt.b, got, tt.want)
			}
		})
	}
}

// 벤치마크
func BenchmarkAdd(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Add(100, 200)
	}
}

// 예제 함수 (문서화 + 테스트)
func ExampleAdd() {
	fmt.Println(Add(1, 2))
	// Output: 3
}

// go test ./...        — 테스트 실행
// go test -v ./...     — 상세 출력
// go test -run Table   — 특정 테스트만
// go test -bench=.     — 벤치마크 실행
// go test -cover ./... — 커버리지

학습 팁

t.Run()으로 서브테스트를 만들면 go test -run TestAddTable/양수처럼 특정 케이스만 실행할 수 있습니다.

주의할 점

t.Error()는 테스트를 계속 실행하고, t.Fatal()은 즉시 중단합니다. 이후 로직이 nil 포인터에 의존할 때는 t.Fatal()을 사용하세요.

자주 묻는 질문

testing 패키지 & 테이블 드리븐 테스트란 무엇인가요?

Go 내장 테스트 프레임워크로 표 기반 테스트를 작성합니다.

testing 패키지 & 테이블 드리븐 테스트 학습 시 주의할 점은 무엇인가요?

t.Error() 는 테스트를 계속 실행하고, t.Fatal() 은 즉시 중단합니다. 이후 로직이 nil 포인터에 의존할 때는 t.Fatal() 을 사용하세요.