unit-testing - go test 是否同时运行单元测试?

标签 unit-testing go

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/

相关文章:

unit-testing - 在 GoLang 的 sqlmock 中出错

docker - Golang Docker API : get events

go - 如何确保按 channel 生产和消费数据是安全的

go - 模拟标准输入和扫描线上的连续输入

android - 如何在运行每个测试用例时卸载并重新安装应用程序

java - namedParameterJdbcTemplate 中的单元测试 GeneratedKeyHolder

swift - 使用 Swift : body of closure not executed 进行单元测试

go - 将 rune 转换为int?

go - 使用go例程初始化多个服务

Python测试原始输入,if语句中的原始输入