【问题标题】:How to shuffle testing order of packages in go?如何在 go 中打乱包的测试顺序?
【发布时间】:2021-12-17 11:00:24
【问题描述】:

当我执行类似这样的命令时:

go test \
    github.com/mycompany/projectX/packageA \
    github.com/mycompany/projectX/packageB \
    github.com/mycompany/projectX/packageC

然后 go 将测试 packageA,然后是 packageB,然后是 packageC。是否有一个选项可以改变包测试的顺序?例如,首先测试包 C,然后测试包 A,然后测试包 B。有一个 -shuffle on 选项,但此选项仅对包内的测试进行混洗。我想打乱包裹的顺序。

【问题讨论】:

  • 为什么要测试不同顺序的包?
  • @Pizzalord 从长远来看,我想为我的测试套件/环境增加稳定性。根据我的经验,当测试变得如此之多时,它们会变得如此紧密地耦合在一起,以至于将新的测试结果添加到难以修复的故障中。我认为从长远来看,由于共享的外部依赖项(例如共享数据库或 redis 服务器),包也可能会以某种方式相互耦合。 (我们也将 go 用于集成测试,而不仅仅是单元测试。)通过对包进行混洗测试,我们可以以某种方式尽快检测并消除包测试依赖关系。

标签: go testing


【解决方案1】:

软件包总是按字母顺序进行测试,没有办法禁用它。我不在那里,所以我必须猜测原因。

一般而言,单元测试不应依赖于执行顺序,因为此时您测试的不仅仅是单元的功能。如果由于某种原因你的单元测试依赖于执行顺序,并且这个顺序总是固定的,你仍然会得到一致的结果。但是,如果此顺序是随机的或取决于您指定它们的命名或顺序,则意味着测试可能在您的计算机上通过但在 CI 中失败,反之亦然。

这样的错误非常令人沮丧,因为测试的顺序影响其结果可能并不明显。

说了这么多,如果您希望仍然可以使用T.Run 方法以随机顺序随机化测试。但这仅适用于同一个包,不能跨包。

【讨论】:

    猜你喜欢
    • 2014-06-05
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 2018-10-11
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多