본문 바로가기
Language/Go

Go - test

by ocwokocw 2021. 11. 28.

참조: 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

댓글