Golang Test Coverage

Golang Test Coverage

Golang의 Test Coverage 확인 방법을 정리한다.

1. Golang Test Coverage

Golang에서는 Test Code의 Coverage를 확인하는 기능을 제공한다. 여기서 Coverage는 Statement Coverage 또는 Line Coverage라고 불리는 Coverage를 의미한다. Statement Coverage는 Code 한 줄이 한번 이상 실행되면 충족되는 Coverage를 의미한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{% highlight golang %}
package coverage

func TestFunc(n int) int {
	if n < 0 {
		return -1
	} else if n == 0 {
		return 0
	} else {
		return 1
	}
}
[Code 1] coverage.go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
package coverage

import (
	"testing"
)

func TestCover(t *testing.T) {
	result := TestFunc(-1)
	if result != -1 {
		t.Error("Wrong result")
	}

	result = TestFunc(0)
	if result != 0 {
		t.Error("Wrong result")
	}
}
[Code 2] coverage_test.go

[Code 1]은 Test를 위한 간단한 함수인 testFunc() 함수를 나타내며, [Code 2]는 [Code 1]의 testFunct() 함수를 활용한 간단한 Test Code를 나타내고 있다.

1.1. Test with Coverage

$ go test -cover .                   
ok      ssup2.com/test  0.001s  coverage: 80.0% of statements
[Shell 1] Test with Coverage

[Shell 1]은 [Code 2]의 Test를 수행할 때 cover Option을 이용하여 Package 단위의 Coverage를 확인하는 모습을 나타내고 있다. cover Option을 통해서 Package 단위의 Coverage를 확인할 수 있다.

1.2. Test with Coverage Profile

$ go test -coverprofile cover.prof ./...
ok      ssup2.com/test  0.001s  coverage: 80.0% of statements

$ go tool cover -html=cover.prof -o cover.html
[Shell 2] Test with Coverage Profile
[Figure 1] go tool cover Output

[Figure 1] go tool cover Output

Code Level Coverage를 자세히 확인해 보고 싶을때는 Coverage Profile을 생성하여 이용하면 된다. [Shell 2]는 [Code 2]의 Test를 수행할 때 coverprofile Option을 이용하여 Coverage Profile을 생성하는 모습을 나타낸다.

생성된 Coverage Profile은 go tool cover 명령어를 통해서 HTML 파일로 변환이 가능하며, 변환된 HTML 파일을 이용하여 Web Browser에서 쉽게 Coverage를 확인할 수 있다. [Figure 1]은 [Code 2]의 생성된 HTML을 나타내고 있다. Test Code에서는 n이 1보다 큰 경우는 없기 때문에 testFunc() 함수의 마지막 부분은 실행되지 않아 Coverage가 100%가 되지 않는 것을 확인할 수 있다. 파일 단위로 Coverage를 확인할 수 있다.

2. 참조