当 go test
运行时,它运行以 _test.go
结尾的文件,方法是运行以 TestXxx
*t- 格式开头的函数–测试并使用 () 模块.我想知道 _test.go
文件中的每个函数是否同时运行,或者是否明确地分别运行每个函数?它是否为每个人创建一个 go routine?如果它确实为每个人创建了一个 go 例程,我可以以某种方式监视 go 例程吗?是否有可能做类似 golibrary.GoRoutines()
的事情并为每个实例获取一个实例并以某种方式或类似方式监视它们?
注意:本题假设你使用go自带的测试框架(testing)。
原文由 Charlie Parker 发布,翻译遵循 CC BY-SA 4.0 许可协议
是 的, 测试作为 goroutines 执行,因此 并发 执行。
但是,正如 @jacobsa 指出的那样 ,默认情况下测试不会并行运行。 To enable parallel execution you would have to call
t.Parallel()
in your test case and setGOMAXPROCS
appropriately or supply-parallel N
(which is set toGOMAXPROCS
默认情况下)。对于并行运行测试的情况,最简单的解决方案是拥有一个用于端口号的全局切片和一个全局原子递增索引,该索引用作切片中测试和端口之间的关联。这样您就可以控制端口号并为每个测试分配一个端口。例子: