为了账号安全,请及时绑定邮箱和手机立即绑定

测试时“无法在 Go Routine 中启动 NATS Server”

测试时“无法在 Go Routine 中启动 NATS Server”

Go
犯罪嫌疑人X 2023-07-10 17:26:11
我正在尝试分开测试以使用不同的 NATS 服务器。(我还不确定它是 NATS,但我的测试会相互影响。)在运行单个测试或测试单个包时,这样做效果很好。go test ./...在我的所有包上运行(如 CI 中所做的那样)我收到此错误(路径匿名):panic: Unable to start NATS Server in Go Routinegoroutine 1 [running]:github.com/nats-io/gnatsd/test.RunServer(0xc000163400, 0xc000163400)    ./go/pkg/mod/github.com/nats-io/gnatsd@v1.4.1/test/test.go:66 +0xbd./lib/msgQueue/nats.NewTestConn(0xc0002adf68, 0x1879e12)    ./lib/msgQueue/nats/testconn.go:19 +0x80看起来 Go 启动 goroutine 来在其中运行测试。在测试中使用TestMain和都init不能解决问题。是否可以在每次测试时启动服务器而不会遇到错误goroutine?或者是否有一些轻量级但功能齐全的内存替代品?
查看完整描述

4 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

我怀疑错误信息:


Unable to start NATS Server in Go Routine

具有误导性。关于 Go 例程的部分可能只是它如何尝试启动 NATS 服务器的实现细节。我怀疑服务器无法启动,因为您在选项中对端口进行了硬编码,并且因为多个测试包可能正在并行运行。只有一个测试包能够绑定到端口来启动 NATS 服务器,所有其他测试包都将失败。


标志上的文档go test说:


-parallel n

    Allow parallel execution of test functions that call t.Parallel.

    The value of this flag is the maximum number of tests to run

    simultaneously; by default, it is set to the value of GOMAXPROCS.

    Note that -parallel only applies within a single test binary.

    The 'go test' command may run tests for different packages

    in parallel as well, according to the setting of the -p flag

    (see 'go help build').

除非您在给定的测试套件中有并行测试(我假设您没有),否则问题可能是并行运行的不同包。按照上面末尾的线索,让我们看看构建标志:


-p n

    the number of programs, such as build commands or

    test binaries, that can be run in parallel.

    The default is the number of CPUs available.

这是来自“编译包和依赖项”文档。请注意,您可以将构建标志和测试标志传递给go test:


$ go test -h

usage: go test [build/test flags] [packages] [build/test flags & test binary flags]

Run 'go help test' for details.

所以考虑跑步go test -p 1 ./...。或者,将选项传递给RunServer函数,允许多个选项安全地并行发生。


查看完整回答
反对 回复 2023-07-10
?
POPMUISE

TA贡献1765条经验 获得超5个赞

每次测试它可能已经启动了一个服务器。没有 goroutine 就无法同时运行。这个错误实际上没有任何意义 - Go 中的任何东西都必须能够在 goroutine 中运行,事实上一切都goroutine 中运行(甚至main),所以不清楚他们在这里真正想说的是什么(我会绝对建议打开有关它的错误报告,因为该错误消息很糟糕)。同时,您可以避免go test同时运行-parallel 1(如 中所示go help testflag),这可能会有所帮助。



查看完整回答
反对 回复 2023-07-10
?
郎朗坤

TA贡献1921条经验 获得超9个赞

就我而言,问题是我已经运行了一个 nats-server 实例,因此测试失败。通过停止服务器,测试成功通过。



查看完整回答
反对 回复 2023-07-10
?
繁星coding

TA贡献1797条经验 获得超4个赞

我的解决方案是在命令GODEBUG=x509sha1=1之前添加go test

PS go1.18.3


查看完整回答
反对 回复 2023-07-10
  • 4 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信