单元测试在构建服务中失败,但不是在本地

Posted

技术标签:

【中文标题】单元测试在构建服务中失败,但不是在本地【英文标题】:Unit Tests Fails in Build Service But Not Locally 【发布时间】:2016-04-24 13:21:04 【问题描述】:

我的构建服务中的两个测试在本地运行时不会失败。

我发现,当我在本地执行 mvn clean test 时,我的测试类的排序顺序是按字母顺序排列的(包和类),但在构建服务中运行时,它们似乎是随机的。

我并不打算需要特定的“命令”,所以我绝对担心一个测试先于另一个测试暗示了一个隔离问题。但是,我认为我不能只告诉 maven 以某种顺序运行类。

我可以做些什么来尝试复制?

编辑

我克隆了我的构建计划,但指向了一个分叉的 repo(相同的代码),它成功运行,没有失败的测试...

【问题讨论】:

我认为这不是最好的方法,但是如果您说构建服务的顺序是随机的,您可以在您的机器上将runOrder 设置为随机并希望遇到相同的情况问题。 测试不应该依赖于顺序。每个测试必须单独运行并在@After 方法中清理资源。但是无论如何,您能否提供测试失败的代码和异常? @SergheyBishyr 我完全同意,但他们失败了,因为他们运行不干净,订单似乎是揭示原因的更快方法。 【参考方案1】:

您应该尝试在本地执行mvn -Dsurefire.runOrder=random clean test 进行随机排序。

但即使您的构建在本地失败,由于测试顺序,随机顺序也不是重现失败的最佳选择。如果测试在按字母顺序运行时都是绿色的,您可能会使用mvn -Dsurefire.runOrder=reversealphabetical clean test 使您的构建始终失败

还有更多选择——请参阅runOrder documentation

【讨论】:

以上是关于单元测试在构建服务中失败,但不是在本地的主要内容,如果未能解决你的问题,请参考以下文章

在构建服务器上使用 Microsoft.Office.Interop dll 进行单元测试失败

使用 Moq 模拟单元测试的异步方法

Jenkins 中的单元测试失败

构建之法阅读笔记02

2Android构建本地单元测试

TFS 单元测试在开发机器上通过但在构建机器上失败