【发布时间】: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