더북(TheBook)

7.3.7 테스트

Go는 기본 라이브러리로 제공되는 testing 패키지로 유닛 테스트를 할 수 있다.

go test 명령을 실행하면 패키지 디렉터리에 있는 테스트 파일에서 테스트 함수를 찾아 테스트를 수행한다.

테스트 파일: 파일 이름이 _test.go로 끝나는 파일

테스트 함수: 함수 이름이 Test로 시작하고 *testing.T를 매개변수로 받는 함수

테스트 함수의 성공/실패는 testing.T.Errorf()와 같은 테스트 실패 메서드를 호출하는 것으로 결정된다. 테스트 함수 내에서 testing.T.Errorf()와 같은 테스트 실패 메서드를 호출하면 해당 테스트 함수는 FAIL로 처리되고, 테스트 실패 메서드를 호출하지 않으면 SUCCESS로 처리된다. Errorf() 메서드 외에도 testing.T.Fail(), testing.T.Fatal() 같은 메서드도 있다. 이러한 메서드를 통해 FAIL의 레벨을 제어할 수 있다.

다음은 앞에서 작성한 Len() 함수의 유닛 테스트 파일이다.

▼ main_test.go

package main
 
import (
    "testing"
)
 
func TestLenForMap(t *testing.T) {
    v := map[string]int{"A": 1, "B": 2}
    actual, expected := Len(v), 2
    if actual != expected {
        t.Errorf("%d != %d", actual, expected)
    }
}
func TestLenForString(t *testing.T) {
    v := "one"
    actual, expected := Len(v), 3
    if actual != expected {
        t.Errorf("%d != %d", actual, expected)
    }
}
func TestLenForSlice(t *testing.T) {
    v := []int{5, 0, 4, 1}
    actual, expected := Len(v), 4
    if actual != expected {
        t.Errorf("%d != %d", actual, expected)
    }
}

테스트 함수 TestLenForMap()에서는 map[string]int{"A": 1, "B": 2} 값에 Len() 함수를 수행한 결과를 테스트했다. TestLenForMap() 함수의 수행 결과가 예상 결과와 다르면 testing.T.Errorf() 메서드를 호출하여 FAIL 상황을 알린다. FAIL이 없으면 테스트 함수는 PASS로 처리된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.