Go Test Suite 만들기

Andy (Yoon Yong) Shin·2021년 12월 5일
1
post-thumbnail

개요

개발 초기에 개발자는 일반적으로 직접 코드를 실행 하여, 코드를 테스트 하곤 합니다. 다만 코드에 양 커짐에 따라, 초기에 적었던 코드를 반복적인 테스트를 해야 하는 상황이 많이 일어나며, 이는 많은 시간을 허비하게 됩니다. 그렇기에, 개발자는 적당한 시기부터는 테스트를 통해 코드를 검증하는 테스트 코드를 작성해야 합니다. 이번 시간에는 개발자가 Golang으로 앱을 만들 경우 어떤 방식으로 코드를 테스트할 수 있는 지 대해 알아보겠습니다. 다행히도, Golang의 테스트 방법은 깔금하고 간단합니다. (이번 글에서는 독자가 기본인 Golang에 대한 지식이 있다는 가정 하에 작성할 예정입니다. 최소 해당 https://go-tour-ko.appspot.com/welcome/1 튜토리얼에 패키지 부분 까지는 인지한 개발자를 위한 글입니다.)

Test Suite 만들기

Test Suite는 무었인가? 라고 물으신다면, 테스트 종합선물세트라고 보시면, 될거 같습니다. 특정 코드에 동일한 목적을 가진 테스트들을 하나에 묶음으로 만들거나, 한번에 실행되어야 할 테스트를 같이 두어, 추후 해당 목적에 대한 테스트를 보다 쉽게 관리하기 위한 목적이라고 볼수 있습니다.

Test Suite를 만드는 데에는 2가지 step이 있습니다.

Step 1 - 테스트 파일 만들기

Golang에서 테스트 파일을 만드려면, "원하는이름_test.go"로 이름일 지으셔야합니다. 이것은 Golang 만에 convention이며, "_test.go" 파일로 만들어진 file은 추후 "go test"로 테스트를 실행하는 go cli 커맨드 외에는 컴파일이 되지 않습니다. 저는 아래와 같이 Golang project를 설정하였습니다.

Step 2 - 테스트 Function 만들기

자신이 만든 "원하는이름_test.go" 파일 안에 function을 Test라는 이름으로 시작하는 function을 만들면되며, Test라는 이름 후에는 무조건 대문자로 시작하는 영문 글자이어야 합니다.

예제

package calculator

import "testing"

func TestSum(t *testing.T) {

}

Test로 시작하지 않는 function은 나중에 "go test" 실행시 test case로 취급이 되지 않습니다. 해당 파일에는 1개 이상의 test case를 만들수 있으며, 추후 TestSum 이외에 TestSubtract, TestMultiply등 여러가지 test case를 추가하여 한번에 관리 가능 하기에 calculator_test.go를 test suite라고 부릅니다.

Golang 테스트 실행법

이제 테스트에 내용은 없지만, 테스트를 실행할수 있는 구성은 모두 갖추어졌습니다. Golang에서 기본적으로 테스트를 구동하는 데에 사용되는 커멘드는 "go test" 이며, 저와 동일하게 프로젝트를 설정 하셧다면, 아래와 같은 커멘드들을 날릴수 있습니다.

go test ./pkg/calculator

go test는 현재 path 기준으로 해당 폴더에 있는 _test.go로 끝나는 파일만 찾아서 test를 실행 합니다. 하여, go test로만 실행한다면, test 파일이 없다고, 메세지가 나오며, 실제 테스트를 돌리고 싶은 package root를 parameter로 넘겨 줘야 합니다. 위 커맨드를 실행 하면, 아래와 같이 결과물이 돌아올것 입니다.

go test ./...

ge test를 현재 폴더에서 recursive하게 모두 찾아서 실행하고 싶다면, 위에 같이 ./... 커멘드를 넘겨 주시면 됩니다. 실행하면, 아래와 같은 결과를 확인하실 수 있습니다.

go test -v ./...

위 test와 큰 차이가 없지만, 조금 더 설명이 나옵니다. 아래와 같은 결과물을 받을 수 있습니다.

go test -v ./... -run TestSum

특정 원하는 test case만 suite에서 실행 하고 싶다면, -run 커멘드와 함께 regex를 제공 하면 가능합니다. 아래는 결과물 입니다.

go test -v ./... -cover

추가로 -cover를 넣게 된다면, code coverage를 console log로 볼수 있습니다. 결과는 아래와 같습니다.

go test ./... -coverprofile=cover.out && go tool cover -html=cover.out -o report.html

마지막으로 위와 같이 커멘드를 넣는다면 보다 편하게 볼수 있는 html report 형식에 code coverage를 보실 수 있습니다. 현재는 실재로 테스트 하는 코드가 없기에... 검은 화면만 있습니다.

끝으로

오늘은 Go test suite를 만드는 기초에 대해서 알아 보았습니다. 다음 글로는 기본 셋업 이후 여러 open source test package를 사용하여, 실제 코드를 테스트 하는 블로그를 적어보려고 합니다.

0개의 댓글