HOWTO · Go

Go에서 어설션 사용

이 튜토리얼은 GoLang에서 assert를 사용하는 방법을 보여줍니다.

이 페이지의 내용

이 튜토리얼은 GoLang에서 assert를 사용하는 방법을 보여줍니다.

GoLang에서 assert 사용

GoLang은 assert에 대한 기본 제공 지원을 제공하지 않지만 Testify API에서 널리 사용되는 타사 패키지 assert를 사용할 수 있습니다. assert 패키지는 다른 언어의 assert 메서드와 마찬가지로 GoLang 코드를 테스트하는 데 사용됩니다.

assert 패키지는 Go 시스템 테스트를 위한 포괄적인 도구를 제공합니다. 다양한 테스트 유형에 대한 많은 방법을 제공합니다. assert 방법에 대한 정보는 여기에서 찾을 수 있습니다.

assert 패키지를 사용하기 전에 다운로드하여 로드해야 합니다. assert 패키지를 얻으려면 아래 단계를 따르십시오.

  • 관리자로 명령 프롬프트를 엽니다.
  • Go 프로젝트의 디렉터리로 이동합니다.

    Go 프로젝트 디렉토리

  • go.mod 파일이 없는지 확인하십시오. 디렉터리에 go.mod 파일이 포함되어 있으면 삭제하고 다음 단계로 이동합니다.
  • 이제 assert 패키지에 대한 go.mod 파일을 초기화하고 다음 명령을 실행합니다.
    go mod init github.com/stretchr/testify/assert
    

    고 모드 초기화

  • 이제 assert 패키지를 다운로드하여 설치하십시오. 다음 명령을 실행합니다.
    go get github.com/stretchr/testify/assert
    

    Go Get Assert

  • 위의 코드는 assert 패키지를 가져오지만 다른 종속성이 필요할 수도 있습니다. 다음 명령을 실행하여 다른 모든 종속성을 다운로드합니다.
    go mod download
    

패키지를 다운로드하고 설치하면 테스트를 실행할 수 있습니다. 예를 들어 보겠습니다.

package main

import (
    "testing"

    "github.com/stretchr/testify/assert"
)

func TestAssert(t *testing.T) {
    assert := assert.New(t)

    var Demo1 string = "Hello, This is delftstack.com!"
    var Demo2 string = "Hello, This is delftstack.com!"

    assert.Equal(Demo1, Demo2, "Both strings should be equal")
}

위의 코드는 두 문자열이 같은지 여부를 테스트합니다. 문자열이 같으면 테스트가 통과됩니다. 그렇지 않으면 실패했습니다.

출력을 참조하십시오.

=== RUN   TestAssert
--- PASS: TestAssert (0.00s)
PASS

위의 출력은 테스트가 통과되었음을 보여줍니다. 하지만 테스트에 실패하면 어떻게 될까요?

어설션 테스트가 실패하는 예를 살펴보겠습니다.

package main

import (
    "testing"

    "github.com/stretchr/testify/assert"
)

func TestAssert(t *testing.T) {
    assert := assert.New(t)

    var Demo1 string = "Hello, This is delftstack.com!"
    var Demo2 string = "Hello, This is delftstack"

    assert.Equal(Demo1, Demo2, "Both strings should be equal")
}

보시다시피 이제 두 문자열이 같지 않으므로 테스트가 실패해야 합니다. 출력을 참조하십시오.

RUN   TestAssert
    prog.go:15:
            Error Trace:    /prog.go:15
            Error:          Not equal:
                            expected: "Hello, This is delftstack.com!"
                            actual  : "Hello, This is delftstack"

                            Diff:
                            --- Expected
                            +++ Actual
                            @@ -1 +1 @@
                            -Hello, This is delftstack.com!
                            +Hello, This is delftstack
            Test:           TestAssert
            Messages:       Both strings should be equal
--- FAIL: TestAssert (0.00s)
FAIL

Program exited.

보시다시피 테스트는 이제 실패했고 프로그램은 테스트에 대한 완전한 정보를 보여줍니다. 다른 테스트를 실행하기 위해 assert와 함께 사용할 수 있는 equal과 같은 많은 메서드가 있습니다.

메소드 assert.Nilassert.NotNil에 대한 예제를 시도해 보겠습니다.

package main

import (
    "testing"

    "github.com/stretchr/testify/assert"
)

func TestAssert(t *testing.T) {

    var demo = []string{
        "delftstack.123@hotmail.com",
        "Delftstack <demo@delftstack.com>",
        "demo@delftstack.tv",
        "demohotmail.com",
        "demo@"}

    // assert for nil
    assert.Nil(t, demo)

}

위의 코드는 주어진 값이 nil인 경우 개체를 확인합니다. 출력을 참조하십시오.

=== RUN   TestAssert
    prog.go:19:
            Error Trace:    /prog.go:19
            Error:          Expected nil, but got: []string{"delftstack.123@hotmail.com", "Delftstack <demo@delftstack.com>", "demo@delftstack.tv", "demohotmail.com", "demo@"}
            Test:           TestAssert
--- FAIL: TestAssert (0.00s)
FAIL

Program exited.

비슷하게,

package main

import (
    "testing"

    "github.com/stretchr/testify/assert"
)

func TestAssert(t *testing.T) {

    var demo = []string{
        "delftstack.123@hotmail.com",
        "Delftstack <demo@delftstack.com>",
        "demo@delftstack.tv",
        "demohotmail.com",
        "demo@"}

    // assert for not nil
    assert.NotNil(t, demo)

}

위의 코드는 nil 객체 또는 값이 아닌지 테스트합니다. 출력을 참조하십시오.

=== RUN   TestAssert
--- PASS: TestAssert (0.00s)
PASS

Program exited.