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 サイトの他の関連記事を参照してください。