Jenkins 中的单元测试失败
Posted
技术标签:
【中文标题】Jenkins 中的单元测试失败【英文标题】:Unit tests failing in Jenkins 【发布时间】:2017-03-20 09:44:44 【问题描述】:我们在 C# 解决方案中有 10K+ 单元测试,这些测试在本地和 TFS 中运行时都通过了。
现在,我们正在为我们的解决方案堆栈设置 Jenkins,但我们面临着大约 250 个单元持续失败的问题。
当我尝试使用 Visual Studio 和 Commnad 提示符 (MSTest) 在 jenkins 设置服务器中运行它们时,通过了相同的单元测试。
您认为问题是什么?任何有关此问题的线索都会有所帮助。
编辑 1:
我进行了研究,但找不到任何东西,因为问题本身很奇怪。如果您不清楚,请提出问题而不是投反对票。
编辑 2:
我能够找出问题所在。它与 unittests dll 配置文件一起使用。当我通过删除配置文件在服务器中执行 MSTest 时,我看到同一组测试失败,而 Jenkins 设置失败。
我想我们需要修改 Jenkins 门户中配置的步骤以加载 unittests dll 配置文件。
【问题讨论】:
【参考方案1】:我的猜测是您的测试实际上不是单元测试,而是集成测试或更糟,并且它们不确定地失败。除此之外,您是在要求人们在没有发布源代码的情况下在这里做不可能的事情。
要么发布来源,要么聘请了解 Jenkins IMO 的顾问。
【讨论】:
感谢您的回答。我确信这些是单元测试,我需要看看它们为什么会失败。【参考方案2】:条件编译符号可能存在问题(例如 DEBUG
与 RELEASE
代码):在 VS 中,您通常在 DEBUG 版本上运行测试,在发布版本上在 CI 服务器上运行。
还要查看一些未正确清理的全局状态。某些在测试看似完成后可能仍在运行的线程可能会破坏以后的测试,即使这些后来的测试位于不同的测试 dll 中也是如此。如果测试失败取决于测试运行的顺序,有时可以检测到这一点。
另一个经常面临的问题是依赖于文件中的测试数据:这些文件可能在实际运行测试的虚拟化环境中丢失。使用Deployment
属性。
【讨论】:
【参考方案3】:NCrunch 也有类似的问题。也许您可以签入 VS 您的“构建”标签平台目标。它应该和 Jenkins 的配置一样。例如“Platform target”是x64,在Jenkins中也应该使用。
【讨论】:
以上是关于Jenkins 中的单元测试失败的主要内容,如果未能解决你的问题,请参考以下文章