当 go test
运行时,它会运行以 _test.go
结尾的文件,方法是运行以 TestXxx
格式开头的函数并使用(*t testing.T) 模块。我想知道 _test.go
文件中的每个函数是否同时运行,或者它是否最终单独运行每个函数?它是否为每个人创建了一个例行程序?如果它确实为每个人创建了一个 goroutine,我可以以某种方式监控 goroutine 吗?有没有可能做类似 golibrary.GoRoutines()
之类的事情并为每个实例获取一个实例并以某种方式或类似的方式监视它们?
注意:本题假设你使用的是 go (testing) 自带的测试框架。
最佳答案
是的,tests are executed as goroutines因此,同时执行。
但是,正如 @jacobsa 所指出的,测试默认情况下不会并行运行 .要启用并行执行,您必须在测试用例中调用 t.Parallel()
并适当设置 GOMAXPROCS
或提供 -parallel N
(其中默认设置为 GOMAXPROCS
)。
在并行运行测试时,最简单的解决方案是为端口号设置一个全局 slice 和一个全局原子递增索引,作为 slice 中的测试和端口之间的关联。这样您就可以控制端口号并为每个测试使用一个端口。示例:
import "sync/atomic"
var ports [...]uint64 = {10, 5, 55}
var portIndex uint32
func nextPort() uint32 {
return atomic.AddUint32(&portIndex, 1)
}
关于unit-testing - go test 是否同时运行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24375966/