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