참조: https://go.dev/doc/tutorial/add-a-test
- 개요
이번에는 Hello 함수에 대한 test 를 추가해보도록 한다.
- test
Go 는 test 를 쉽게할 수 있도록 unit testing 를 위한 모듈이 내장되어 있다. 명명규칙, Go. 의 testing package 그리고 go test 명령어를 통해 test 를 빠르게 작성하고 실행할 수 있다.
greetings directory 에서 greetings_test.go 파일을 생성한다. 파일 이름을 _test.go 와 같이 지정하면 go test 명령어를 수행할 때 Go 가 해당 파일에 test 함수들이 포함되어있다고 인식한다. greetings.go 에 아래 내용을 복사한다.
package greetings
import (
"testing"
"regexp"
)
// TestHelloName calls greetings.Hello with a name, checking
// for a valid return value.
func TestHelloName(t *testing.T) {
name := "Gladys"
want := regexp.MustCompile(`\b`+name+`\b`)
msg, err := Hello("Gladys")
if !want.MatchString(msg) || err != nil {
t.Fatalf(`Hello("Gladys") = %q, %v, want match for %#q, nil`, msg, err, want)
}
}
// TestHelloEmpty calls greetings.Hello with an empty string,
// checking for an error.
func TestHelloEmpty(t *testing.T) {
msg, err := Hello("")
if msg != "" || err == nil {
t.Fatalf(`Hello("") = %q, %v, want "", error`, msg, err)
}
}
코드의 의미는 아래와 같다.
- test 중인 코드와 같은 package 에서 test 함수들을 구현했다.
- greetings.Hello 함수를 테스트하기 위해 2 개의 test 함수를 작성했다. 함수이름을 Test* 와 같이 Test 접두사를 붙여 작성하였다. 또한 test 함수들은 testing package 의 testing.T 타입을 인자로 받는다. 이 파라미터의 메소드를 이용하면 logging 을 할 수 있다.
- TestHelloName 는 유효한 응답을 테스트하므로 유효한 응답이 오지 않거나 err 이 nil 이 아닌 경우 실패라고 가정한다. TestHelloEmpty 는 그 반대 상황을 가정하고 있으므로 이와 반대의 조건에서 실패라고 가정한다.
greetings directory 에서 go test 명렁어로 test 를 수행한다. go test 명렁어는 _test.go 로 끝나는 파일에서 Test 로 시작하는 test 함수들을 실행한다. -v flag 를 추가하면 모든 test 의 결과들을 출력할 수 있다. -v flag 없이 go test 를 수행하면 실패한 test 에 대해서만 출력하는데, test 함수가 많을 때 유용하다.
'Language > Go' 카테고리의 다른 글
Go - Go 와 Gin 을 활용한 RESTful API 개발 (0) | 2021.11.28 |
---|---|
Go - compile 과 install (0) | 2021.11.28 |
Go - multiple input 과 return (0) | 2021.11.28 |
Go - random 과 slice (0) | 2021.11.28 |
Go - Return 과 handle an error (0) | 2021.11.28 |
댓글