【问题标题】:Hudson runs some tests but not othersHudson 运行了一些测试,但没有运行其他测试
【发布时间】:2011-10-20 10:56:49
【问题描述】:

我有一个 Maven 管理的 Java 项目,其中包括 JUnit 测试——没有什么不寻常的。最近,我开始在我的机器上构建损坏的版本,但 Hudson 仍然很高兴。我意识到我所做的更改破坏了单元测试,但注意到 Hudson 没有运行单元测试。我的大多数测试都运行良好,但我的一个包中的所有东西都完全不存在。未列为“已跳过”,但实际上缺少

现在,我没有设置这个 Hudson 实例,而且我不是专家,所以我不知道从哪里开始。排名不分先后:

  • 我查看了项目设置页面,复制了正在使用的确切 Maven 命令行并在本地运行它。 POM 中有一些 Hudson 特定的配置文件设置,所以我认为值得一试。缺失的测试仍在运行(并且失败)。
  • 我试图查看旧的处决,看看是否可能是最近的变化。不幸的是,我们只保留了 5 个旧版本,所以死路一条。
  • 我仔细检查了 POM,看看是否有任何东西可能导致它排除测试 - 不是 Maven genius 但我可以非常自信地说不应该有任何东西,无论如何它应该没关系,因为第 1 个项目符号
  • 我下载了 Hudson 工作区。有趣的是,/target 下有一个test-classes 目录,其中包含所有缺失测试的.class 文件,但/target/surefire-reports 没有匹配的输出文件

我觉得我一定是缺少某种设置某处,或者至少某种日志文件可以表明这是如何发生的——也许测试失败了所以 em> 非常糟糕,因为在它可以写失败之前调用它们的 Surefire 进程? - 但就像我说的,哈德逊纽布。我的下一步应该是什么?


更新:在本地安装 Jenkins 并尝试重现。我疯了:它仍然无法运行很多测试,即使我自己登录,去 Jenkins 工作工作区,然后构建

  • 在我自己的帐户下
  • 使用我自己的本地 m2 存储库(来自网络驱动器)
  • 使用相同的 Maven/Java 二进制文件(来自网络驱动器)
  • 运行相同的操作系统

据我所知,两台机器上的源是相同的,我的环境应该是相同的(相同的帐户)...我想不出有什么区别,当然除了很多测试没有不要在 Jenkins 盒子上运行。

【问题讨论】:

  • 如果您能以某种方式登录到 Hudson 框并成为运行 Hudson 构建的用户,请在那里运行相同的 Maven 命令,看看会发生什么。
  • 你的目标和选择是什么(在工作配置中)?你可以发布你的配置截图吗?谢谢。
  • 不幸的是,这个 Hudson 位于内部网络上,并且与 Internet 隔离,因此提供屏幕截图并非易事。我正在以交互方式重现测试未运行的问题;如果我无法追踪到,我会在这里跟进。

标签: unit-testing hudson surefire


【解决方案1】:

我刚刚遇到了这个确切的问题,我敢打赌你们的一些测试没有遵循标准命名约定; *测试.java。 Surefire 默认只选择遵循特定命名约定的测试; http://maven.apache.org/plugins/maven-surefire-plugin/examples/inclusion-exclusion.html

【讨论】:

  • 我的印象是这就是 JUnit 3 和 JUnit 4 之间的区别。不是吗?
  • 这里描述的问题可能是由几个原因引起的。您可能是正确的-但我的解释仍然是可能的。在我的场景中,我使用的是 TestNG,但我根本没有意识到默认情况下 Maven 插件需要严格命名测试类。无法知道这是否是原作者的问题。
【解决方案2】:

我几乎可以肯定this is not Hudson's fault,甚至完全是 Maven 的错。我认为这是一个 JUnit 错误,我将在另一个问题中追查它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 2015-02-19
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多