Go에서 어설션 사용

Sheeraz Gul 2024년2월15일
Go에서 어설션 사용

이 튜토리얼은 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.
작가: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook