[go] Go 언어에서 함수와 메소드의 유닛 테스트

Go 언어는 테스트를 위한 강력한 테스팅 프레임워크를 제공합니다. 이 프레임워크를 사용하여 함수와 메소드를 테스트할 수 있으며, 코드의 품질을 보장하고 버그를 예방할 수 있습니다. 이 글에서는 Go 언어에서 함수와 메소드를 어떻게 유닛 테스트할 수 있는지 알아보겠습니다.

함수의 유닛 테스트

Go 언어에서 함수의 유닛 테스트를 작성하기 위해서는 testing 패키지를 사용합니다. 해당 패키지에는 다양한 테스트 관련 함수와 메소드가 포함되어 있습니다.

먼저, 테스트를 작성할 함수와 일치하는 이름의 테스트 함수를 작성해야 합니다. 테스트 함수의 이름은 Test로 시작해야 하고, *testing.T 형태의 매개 변수를 받아야 합니다. 예를 들어, Add 함수를 테스트하는 경우 다음과 같이 테스트 함수를 작성할 수 있습니다:

func TestAdd(t *testing.T) {
    result := Add(2, 3)
    expected := 5
    if result != expected {
        t.Errorf("Add(2, 3) returned %d, expected %d", result, expected)
    }
}

func Add(a, b int) int {
    return a + b
}

위의 예제에서는 Add 함수를 테스트하기 위해 TestAdd 테스트 함수를 작성했습니다. 테스트 함수 내에서 Add 함수를 호출하여 예상 결과와 실제 결과를 비교하고, 결과가 예상과 다를 경우 t.Errorf를 사용하여 테스트 실패를 출력합니다.

테스트를 실행하려면 터미널에서 다음 명령을 실행하세요:

go test

메소드의 유닛 테스트

Go 언어에서 메소드의 유닛 테스트를 작성하는 방법은 함수의 유닛 테스트와 유사합니다. 메소드를 테스트하기 위해서는 *testing.T 형태의 매개 변수를 받는 테스트 함수를 작성해야 합니다.

아래 예제에서는 Circle 구조체의 Area 메소드를 테스트하는 방법을 보여줍니다:

type Circle struct {
    radius float64
}

func (c Circle) Area() float64 {
    return math.Pi * c.radius * c.radius
}

func TestCircleArea(t *testing.T) {
    circle := Circle{radius: 5}
    result := circle.Area()
    expected := 78.53981633974483
    if result != expected {
        t.Errorf("Circle.Area() returned %f, expected %f", result, expected)
    }
}

위의 예제에서는 TestCircleArea 테스트 함수에서 Circle 구조체의 Area 메소드를 호출하여 결과를 비교합니다. 테스트 함수를 실행하려면 터미널에서 go test 명령을 실행하세요.

결론

Go 언어에서 함수와 메소드의 유닛 테스트는 testing 패키지를 사용하여 간단하게 작성할 수 있습니다. 유닛 테스트를 작성하면 코드의 품질을 높이고, 버그를 예방할 수 있습니다. 이를 통해 안정적이고 신뢰할 수 있는 코드를 개발할 수 있습니다.

더 많은 정보를 원하시면 Go 공식 문서를 참조하세요.

참고 문서: