是否可以从非测试go文件中调用测试函数以开始执行测试?
例如,我有一个测试功能:
package API
import "testing"
func TestAPI(t *testing.T) {
...
}
我需要从非测试版文件中调用此文件。
package main
import "../API"
API.TestAPI()
我可以这样做吗?
Go中有一些很棒的测试模式。不幸的是,您尝试进行测试的方式无法正常工作。
您的单元测试应使用命令go test <pkg
运行。绝对不要从代码内部调用测试。
Go中的单元测试通常有两种主要形式-黑盒单元测试。
白盒测试:从内部测试未导出功能包装本身。
黑盒测试:从外部测试已导出功能包,模拟其他包如何与之交互。
如果我有一个要测试的软件包example
,有一个简单的exported函数,对提供的数字列表进行求和。 Sum
函数还使用了一个unexported实用程序函数。
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:黑盒测试
[注意,我正在测试example
程序包,但测试位于example_test
程序包中。添加_test
使Go编译器保持满意状态,并使其知道这是example
的测试包。在这里,我们只能访问导出的变量和函数,这些变量和函数可以让我们测试外部软件包在导入和使用example
软件包时将经历的行为。
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:白盒测试
注意,我正在测试example
程序包,并且该测试也位于example
程序包中。这允许单元测试访问未导出的变量和函数。
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的测试框架有更好的了解。为了简单起见,我没有在示例中使用任何外部库,尽管github.com/stretchr/testify是一个非常流行且功能强大的用于单元测试的软件包。
您正在尝试的是
不,您不能这样做。重新设计。