Go - testing

Go는 testing을 통해 테스트 코드 작성을 지원한다. 

테스트를 수행할 테스트 파일은 _test.go 형식의 파일 이름을 가져야 한다. (예: cv_test.go)

import "testing"

Test

func Test함수이름(t *testing.T) {
    res := 함수(...)
    if res != 결과 {
        t.Errorf("...")
    }
}

테스트를 수행할 함수는 Test로 시작하고, *testing.T를 파라미터로 받는다. 

예:

func RepeatAdd(n int) int {
    i := 0
    for j := 1; j <= n; j++ {
        i += j
    }
    return i
}

func TestRepeatAdd(t *testing.T) {
    num := RepeatAdd(10)
    if num != 55 {
        t.Errorf("RepeatAdd(10) should returns 55, not %d", num)
    }
}

xxx_test.go에 작성된 TestXxxx 함수를 실행시키는 방법은 아래와 같다. 

$ go test
PASS
ok      LearnGo 2.538s

Benchmark

testing에서 성능 테스트도 지원한다. 

func Benchmark함수이름(b *testing.B) {
    for i := 0; i < b.N; i++ {
        함수이름(...)
    }
}

Test와 마찬가지로, 함수는 Benchmark로 시작하고 *testing.B를 파라미터로 받는다. 

벤치마크는 해당 함수를 *testing.B.N 번 반복하는 방식으로 측정하게 된다. 

예:

func BenchmarkRepeatAdd(b *testing.B) {
    for i := 0; i < b.N; i++ {
        RepeatAdd(10)
    }
}

벤치마크 함수를 실행할 때는 -bench 옵션을 사용하면 된다. 

$ go test -bench .
goos: windows
goarch: amd64
pkg: LearnGo
cpu: Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz
BenchmarkRepeatAdd-8    42035350                29.24 ns/op
PASS
ok      LearnGo 2.538s

메모리 정보도 확인하려면 -benchmem 옵션을 추가할 수 있다. 

$ go test -bench . -benchmem
goos: windows
goarch: amd64
pkg: LearnGo
cpu: Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz
BenchmarkRepeatAdd-8    32195317                37.04 ns/op            0 B/op          0 allocs/op
PASS
ok      LearnGo 2.705s