Go 如何处理预期的+;'中的无关故障;去测试所有';?

Go 如何处理预期的+;'中的无关故障;去测试所有';?,go,Go,我正在使用NPM管理使用go 1.11模块的go包的构建/测试/版本生命周期。在发布之前,我想检查“所有内容”,包括模块,因此我运行:go test all(它在所有包含的模块中运行测试) 问题是go 1.11.5中的标准os包(至少)在某些Mac版本/环境(包括我的)上失败。这对我的目的来说没关系,因为失败发生在我不使用的函数中。但是,这会导致发布过程失败,因为go test以非零状态退出 关于如何处理这个问题有什么建议吗 如果能够为本地测试的调用树中的函数运行所有测试(go test all

我正在使用NPM管理使用go 1.11模块的go包的构建/测试/版本生命周期。在发布之前,我想检查“所有内容”,包括模块,因此我运行:
go test all
(它在所有包含的模块中运行测试)

问题是go 1.11.5中的标准
os
包(至少)在某些Mac版本/环境(包括我的)上失败。这对我的目的来说没关系,因为失败发生在我不使用的函数中。但是,这会导致发布过程失败,因为
go test
以非零状态退出

关于如何处理这个问题有什么建议吗

如果能够为本地测试的调用树中的函数运行所有测试(
go test all-relevant
),那就太好了。或者,如果我可以命名并跳过测试,那也可以

我知道
-run
标志,但这似乎没有帮助,因为我无法事先知道要运行哪些测试,而且(从我所看到的情况来看)
-run
使用的正则表达式不支持负面外观,因此构造一个正则表达式来排除某些测试是非常繁琐的

操作系统
测试失败:

--- FAIL: TestStatError (0.00s)
    os_test.go:200: symlink no-such-file symlink: permission denied
--- FAIL: TestHardLink (0.00s)
    os_test.go:694: open "hardlinktestto" failed: open hardlinktestto: permission denied
--- FAIL: TestSymlink (0.00s)
    os_test.go:780: Create("symlinktestto") failed: open symlinktestto: permission denied
--- FAIL: TestLongSymlink (0.00s)
    os_test.go:847: symlink "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", "longsymlinktestfrom" failed: symlink 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef longsymlinktestfrom: permission denied
--- FAIL: TestRename (0.00s)
    os_test.go:868: open "renamefrom" failed: open renamefrom: permission denied
--- FAIL: TestRenameOverwriteDest (0.00s)
    os_test.go:896: write file "renameto" failed: open renameto: permission denied
--- FAIL: TestAppend (0.00s)
    os_test.go:1684: Open: open append.txt: permission denied
--- FAIL: TestSameFile (0.00s)
    os_test.go:1766: Create(a): open a: permission denied
FAIL
FAIL    os  19.145s

您可以使用来选择由操作系统、体系结构或构建标记运行哪些测试。对于那些针对操作系统特定功能的测试,只需使测试特定于操作系统即可。不应该有“预期失败”这样的事情,这些只是误用的测试。

我不明白。我熟悉为自己的文件使用“build”标记,但问题是第三方
os
软件包中出现了故障。我已经检查了源代码,在测试中没有看到要关闭的构建标记。我同意“不应该”有“预期失败”这样的事情,但既然显然有这样的事情,我想处理它;第三方将是任何不属于您的项目或stdlib的一部分的依赖项。我非常怀疑
os
软件包中是否存在故障-在发布新的稳定版本之前,测试已经通过。你的问题没有明确指出哪些测试没有通过,因此很难提供比这更深入的见解。我为我之前(删除)的评论道歉。我确实说过哪个考试不及格。处理
os
包中硬链接的测试。当然,我本可以说得更清楚。但是基本问题仍然存在,因为标准的
os
包测试绝对失败,我不想讨论语义,而是想找到一个解决方案。如果你有一个,我很想理解它,因为我理解你目前的答案,它似乎并不相关。而且,自从你提出这个问题以来,我使用了“第三方”一词,因为我在想如何解决这个问题,你想“全部测试”,这需要从所有方面进行测试,所以,用“第三方”来概括“不是我的”,这对我来说似乎完全合适。失败的测试在标准库中这一事实与问题无关。它在某些方面是相关的,例如,在任何版本作为稳定版本发布之前,stdlib在所有受支持的平台上都经过了良好的测试。达尔文/amd64上的
os
测试不会失败:“标准第三方
os
软件包”是什么?你是指std库中的
os
软件包吗?是的;我澄清了。通常情况下,不测试模块的导入,因为它们应该单独测试;在构建go工具链之外测试stdlib更不寻常。如果测试
all
是您真正想做的事情,我至少会将命令包装在脚本中以过滤掉stdlib包(如果您真的想,当然也可以在bash-one-liner中进行)。您可以从模块的主文件夹运行
go-test./…
。这对你不管用吗?如果您还想测试依赖项,请运行
go mod vendor
,并在
vendor
文件夹中执行
go test./…
(由
go mod
创建)。我明白了,这是为了验证可传递的依赖项版本。虽然我不完全同意将stdlib保留在
all
通配符(history here:)中的选择,但您仍然可以使用
go list
在命令行中非常轻松地过滤掉dep。