「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go でエクスポートされていない関数をテストするにはどうすればよいですか?

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

2024 年 11 月 6 日に公開
ブラウズ:620

How Can You Test Unexported Functions in Go?

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

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

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

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

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

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

Example

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

// 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
}

ブラックボックス テスト (example_test.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()
        }
    }
}

ホワイトボックス テスト (example_internal_test.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()
        }
    }
}

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

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3