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