1

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

现在,我没有设置这个 Hudson 实例,而且我不是专家,所以我不确定从哪里开始。没有特别的顺序:

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

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


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

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

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

4

2 回答 2

2

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

于 2011-12-29T10:46:25.550 回答
0

我几乎可以肯定这不是 Hudson 的错,甚至严格来说不是 Maven 的错。我认为这是一个 JUnit 错误,我会在另一个问题中追究它。

于 2011-09-23T21:44:33.167 回答