gpt4 book ai didi

testing - 未调用的测试如何影响 Go 中的另一个测试?

转载 作者:数据小太阳 更新时间:2023-10-29 03:12:52 24 4
gpt4 key购买 nike

我在 https://github.com/VertebrateResequencing/wr/blob/develop/jobqueue/jobqueue_test.go 中有一个测试函数 TestJobqueue()我可以单独调用:go test -tags netgo ./jobqueue -v -run 'TestJobqueue$'

我最近开始遇到与 boltdb(我的依赖项之一)相关的测试失败,并伴随着 signal SIGBUS: bus error code panic ,或者通常测试失败是因为无法打开数据库。但仅在处理 NFS 安装目录时。很公平,我或 boltdb 有某种与 NFS 相关的错误。

但我无法解决的问题是,只有当存在完全不同的测试函数时,我才会遇到这些错误。

根据 https://github.com/VertebrateResequencing/wr/blob/92fb61ccd7819c8f1edfa8cce8468c4250d40ea7/jobqueue/rest_test.goTestREST() 中的注释,如果我调用 Serve(serverConfig) (正在测试的包中的函数,在 TestJobqueue() 和其他测试函数中多次调用的函数)测试函数 TestJobqueue() 失败。如果我不这样做,它就不会。

简而言之,一个测试函数中的测试失败可以通过我未运行的测试函数中的 bool 值来控制。

这怎么可能?

编辑:为了解决第一个答案提出的一些问题,TestJobqueue() 正在隔离运行。在它之前或之后没有其他测试运行。如果数据库文件已经存在,Serve() 会首先删除这些文件,然后创建一个新文件来运行新的测试集。我正在寻找答案的奇怪事情是未执行的函数如何产生这种副作用。我可以通过 panic 调用开始或结束 TestREST() 来证明它确实未执行:从未见过该 panic 的输出,但是 TestJobqueue() 失败仍然可以由 TestREST() 中的 bool 值控制(如果最后出现 panic )。

Edit2:这原来是我在TestJobqueue() 中做的一件不寻常的事情引起的,即调用go test 自身。不用说,如果你这样做,奇怪的事情就会发生......

最佳答案

简而言之,一个测试函数中的测试失败可以通过我未运行的测试函数中的 bool 值来控制。

这不是一个很好的总结。您的测试启动服务器。另一个测试启动服务器,显然,问题就在那里。您似乎已经注释掉了在测试结束时停止服务器的代码?您不能在同一个端口上运行两个服务器。

同时运行两个服务器可能会导致端口冲突或某些网络状况,因为它们似乎都使用类似(相同?)的配置,加载方式如下:

config := internal.ConfigLoad("development", true)

不带配置运行使用默认值,避免冲突,带配置运行导致冲突。因此,为了确定它,尝试一次使用一个设置创建一个配置,直到找到导致问题的配置设置(很可能是 Port 或 WebPort)。或者,确保测试在最后停止服务器。

[编辑] 看起来您已经通过一次更改一个来将其缩小到 DBFile 配置设置。这意味着服务器启动了一个新的数据库实例 - 如果两者都尝试为新数据库使用相同的文件,这将导致争用并且运行的第二个测试将失败。

从你上面的描述中你正在做什么或问题是什么并不完全清楚,所以你可以尝试改进它以准确说明操作顺序和问题。例如,如果您之前运行过创建数据库的测试,由于存在数据库文件,它可能会影响以后的测试运行,因此您的测试不是完全独立的。

[编辑 2 - 进一步编辑问题后]如果注释掉 TestREST 完全解决了您的问题(或在它开始之前出现 panic ),并且考虑到更改它会破坏其他测试,那么您正在以某种方式执行 TestREST。

查看您的 jobqueue_test 代码,它似乎调用了 go test,因此您可能正在运行您假设的更多测试?如果您没有看到 panic 输出,我怀疑您在这个大测试中使用了 exec.Command。尝试删除失败测试的一些部分,直到它可以准确缩小运行另一个测试的调用范围。在测试中调用 go test 是很不寻常的!

https://github.com/VertebrateResequencing/wr/blob/develop/jobqueue/jobqueue_test.go#L2445

关于testing - 未调用的测试如何影响 Go 中的另一个测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46360457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com