在 Go 中,不应从代码本身调用测试函数。相反,单元测试应该使用 go test
Go 支持两种类型的单元测试:黑盒和白盒。
黑盒测试 测试从包外部导出的函数,模拟外部包如何与其交互。
白盒测试 测试包本身内部未导出的函数。
考虑一个名为 example 的包,其中包含导出的函数 Sum 和未导出的实用函数 add。
<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中文网其他相关文章!