我已经在Go中开发了一个CLI。我的开发环境是Linux。我编写了单元测试,并且仅在测试通过时才生成可执行文件的发行版。当我在Linux环境中测试或使用我的工具时,一切正常。
我的CI / CD管道围绕goreleaser构建,以生成多平台可执行文件。由于我的应用程序未使用特殊的跨平台功能,因此我非常有信心Windows可执行文件应能按预期工作。但事实并非如此。
长话短说,请始终使用filepath.ToSlash()
标准化路径。但这不是我的问题。
因此,我的问题是:“由于行为可能会因不同的错误而在不同的平台上发生变化,因此可以运行go test
来获取操作系统/体系结构列表吗?”我无法想象在Windows上重新启动以手动测试每个提交,我也不认为纪律就是答案。如果是这样,我们根本不会测试任何东西。
在Google和Stack Overflow上进行的“ golang跨平台测试”快速搜索未返回任何结果。我是否缺少某些东西,或者我对这个问题的解决方法是否错误?
大多数评论指出,在给定平台上测试可执行文件行为的唯一方法是...在此平台上对其进行测试(例如,在多阶段CI / CD中)。我知道,这是如此明显,以至于可能没有其他方法可以实现。
但是,对于每个提交(部分未经测试的代码),在每个平台上触发并行CI / CD作业听起来并不令人满意。这是确保代码在每个目标平台上均能正常运行的唯一方法,但是我想知道是否有人在这个问题上迷失了方向,并找到了解决此问题的CI / CD之前解决方案。
答案 0 :(得分:0)
尽管这可能是获得结论性测试结果的唯一方法,但这意味着在每个平台上通过并行测试来触发CI / CD。在提交未经测试的代码之前,我一直在开发人员机器上寻找解决方案
您可以安装本地CICD工具,该工具会在(本地)提交时触发这些测试。
例如,本地GitLab可以run test in multiple platforms simultaneously(自GitLab 11.5起)
但这意味着至少要有一个Docker映像才能在Linux开发环境中的Windows上进行测试。
但是,如“ Design and unit-test cross-platform application”所述,仅使用Go即可
无法对与当前系统不同的目标系统运行go测试。