当运行go test时,它通过运行以格式TestXxx开始的函数并使用(*t testing.T)模块来运行以_test.go结尾的文件.我想知道_test.go文件中的每个函数是同时运行的,还是明确地分别运行每个函数?它是否 for each 人创建了围棋程序?如果它确实 for each 人创建了围棋 routine ,我可以以某种方式监控围棋 routine 吗?有没有可能做一些像golibrary.GoRoutines()这样的事情, for each 人获取一个实例,并以某种方式或类似的方式监视它们呢?


注意:这个问题假设您使用go(测试)附带的测试框架.

推荐答案

Yestests are executed as goroutines,因此执行concurrently.

然而,正如@jacobsa所指出的那样,测试可以进行not run in parallel by default次.要启用并行执行,您必须在测试用例中调用t.Parallel()并适当设置GOMAXPROCS或提供-parallel N(缺省情况下设置为GOMAXPROCS).

在并行运行测试时,最简单的解决方案是为端口号提供一个全局切片,并使用一个全局原子递增索引作为切片中测试和端口之间的关联.这样,您就可以控制端口号,每个测试都有一个端口.例子:

import "sync/atomic"

var ports [...]uint64 = {10, 5, 55}
var portIndex uint32

func nextPort() uint32 {
    return atomic.AddUint32(&portIndex, 1)
}

Go相关问答推荐

有没有更简单的方法在Go中编写这个逻辑?

区分Terminal和Hook Zerolog Go中的错误级别日志(log)输出

gorm插入不支持的数据

Go PQ驱动程序无法使用默认架构进行查询

如何给杜松子wine 的路由加上一个名字,比如Laravel ?

CURL和Postman HTTP POST工作,但Golang请求失败,状态为400

如何修复 Go 中协议缓冲区定义中重新定义的字段?

如果第一次匹配条件,如何跳过切片中的值

如何使用 AWS sdk 在 Go 中正确解组 PartiQL 查询的结果?

Opensearch 错误 ping 弹性服务器:由未知权威签署的 x509 证书

函数实现接口时的模式名称是什么?

Go 信号处理程序不处理终端窗口关闭

无法在 GORM 中排序

将未知长度切片的值分配给Go中的 struct ?

Go GCP 同时模拟两个服务帐户

如何使用golang操作很长的字符串以避免内存不足

如何在golang中使用ozzo验证进行时间最大验证

Go 错误:Is() 和 As() 声称是递归的,是否有任何类型实现错误接口并支持这种递归 - 无错误?

comparable和any有什么区别?

在 etcd 键值存储中禁用历史记录