在 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