Go语言 进行跨平台测试

xe55xuns  于 2022-12-07  发布在  Go
关注(0)|答案(2)|浏览(146)

问题描述

我已经在Go语言中开发了一个CLI。我的开发环境是Linux。我编写了单元测试,并且只在测试通过时才发布可执行文件。当我在Linux环境中测试或使用我的工具时,一切都工作正常。
我的CI/CD管道是围绕goreelaser构建的,用于生成多平台可执行文件。由于我的应用程序没有使用奇异的跨平台功能,我非常有信心windows可执行文件应该能像预期的那样工作。但它没有。
长话短说,总是用filepath.ToSlash()规范化路径。但这不是我的问题。

问题

因此我的问题是:“由于在不同的平台上,行为可能会因为这样的小错误而改变,是否有可能对一系列操作系统/架构运行go test?”我无法想象在Windows上重启来手动测试每个提交,我不认为纪律是答案。如果是,我们根本就不会测试。

次搜索尝试

在Google和Stack Overflow上快速搜索“golang cross-platform tests”没有返回任何结果。是我遗漏了什么还是我处理这个问题的方法错了?

第一次编辑

大多数评论指出,在给定平台上测试可执行文件行为的唯一方法是......在该平台上测试它(例如,在多阶段CI/CD中)。这是如此明显,以至于可能没有其他方法来实现它,我知道。
但是在每个平台上为每个提交(部分未测试的代码)触发并行CI/CD作业听起来并不令我满意。这是确定代码在每个目标平台上的行为是否符合预期的唯一方法,但我想知道是否有人偶然发现了这个问题,并找到了解决这个问题的预CI/CD解决方案。

wgmfuz8q

wgmfuz8q1#

尽管这可能是获得结论性测试结果的唯一方法,但它意味着在每个平台上通过并行测试触发CI/CD。
您可以安装一个本地CICD工具,它将在(本地)提交时触发这些测试。
例如,一个本地GitLab可以run test in multiple platforms simultaneously(从GitLab 11.5开始)
但这意味着至少要有一个Docker映像,以便从Linux开发环境在Windows上进行测试。
然而,单独使用Go语言,如“Design and unit-test cross-platform application“中所述
无法对不同于当前系统的目标系统运行go测试。

q43xntqr

q43xntqr2#

如果您尝试测试不同的CPU架构,您应该能够使用QEMU来完成。This blog post解释了如何完成。
如果你想测试一个不同的操作系统,你可以在Docker容器中做你需要做的一切。你可以使用像VSCode的远程开发工具包这样的工具,在一个特定的容器中轻松地开发/构建/测试一个项目,或者你可以编写一个自定义的Makefile,当你运行make test时,它调用适当的Docker命令(允许你用一个命令在多个操作系统中运行测试)。

相关问题