ホームページ  >  記事  >  バックエンド開発  >  Go でエクスポートされていない関数をテストするにはどうすればよいですか?

Go でエクスポートされていない関数をテストするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-26 05:47:02877ブラウズ

How Can You Test Unexported Functions in Go?

非テスト Go ファイルからのテスト関数の呼び出し

Go では、コード自体の内部からテスト関数を呼び出すべきではありません。代わりに、単体テストは go test を使用して実行することを目的としています。コマンド。

ブラック ボックス テストとホワイト ボックス テスト

Go は、ブラック ボックスとホワイト ボックスの 2 種類の単体テストをサポートします。

ブラック ボックス テスト パッケージの外部からエクスポートされた関数をテストし、外部パッケージがその関数とどのように対話するかをシミュレートします。

ホワイトボックス テスト は、パッケージ自体の内部からエクスポートされていない関数をテストします。

エクスポートされた関数 Sum とエクスポートされていないユーティリティ関数 add を含む example というパッケージを考えます。

<code class="go">// example.go
package example

func Sum(nums ...int) int {
    sum := 0
    for _, num := range nums {
        sum = add(sum, num)
    }
    return sum
}

func add(a, b int) int {
    return a + b
}</code>

ブラックボックス テスト (example_test.go 内):

<code class="go">package example_test

import (
    "testing"

    "example"
)

func TestSum(t *testing.T) {
    tests := []struct {
        nums []int
        sum  int
    }{
        {nums: []int{1, 2, 3}, sum: 6},
        {nums: []int{2, 3, 4}, sum: 9},
    }

    for _, test := range tests {
        s := example.Sum(test.nums...)
        if s != test.sum {
            t.FailNow()
        }
    }
}</code>

ホワイトボックス テスト (example_internal_test.go 内):

<code class="go">package example

import "testing"

func TestAdd(t *testing.T) {
    tests := []struct {
        a   int
        b   int
        sum int
    }{
        {a: 1, b: 2, sum: 3},
        {a: 3, b: 4, sum: 7},
    }

    for _, test := range tests {
        s := add(test.a, test.b)
        if s != test.sum {
            t.FailNow()
        }
    }
}</code>

要約すると、単体テストは go test コマンドを使用して実行する必要があり、決して実行しないでください。コード内から直接呼び出されます。ブラック ボックス テストとホワイト ボックス テストでは、テスト目的でパッケージの実装へのさまざまなレベルのアクセスが提供されます。

以上がGo でエクスポートされていない関数をテストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。