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
    

    Go Mod Init

  • 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")
}

上記のコードは、2つの文字列が等しいかどうかをテストします。 文字列が等しい場合、テストに合格します。 それ以外の場合は、失敗しました。

出力を参照してください。

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

上記の出力は、テストに合格したことを示しています。 しかし、テストが失敗した場合はどうなりますか?

assert テストが失敗する例を試してみましょう。

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.

ご覧のとおり、テストは失敗し、プログラムはテストに関する完全な情報を表示します。 equal のような多くのメソッドがあり、assert と一緒に使用してさまざまなテストを実行できます。

メソッド 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