【问题标题】:Hamcrest - what version to use? 1.3 or 2Hamcrest - 使用什么版本? 1.3 或 2
【发布时间】:2016-02-19 23:55:34
【问题描述】:

我很困惑。目前我正在使用

测试我的 spring 应用程序
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
</dependency>

只要我想匹配正则表达式,我就很高兴。在 hamcrest 1.3 中,您需要编写自己的匹配器,我不太喜欢它。 我搜索并发现 hamcrest 2.0 内置了一些东西,例如:

assertThat(DateHelper.getActualDateForXML(), MatchesPattern.matchesPattern("\\d{4}+-\\d{2}-+\\d{2}+T\\d{2}+:\\d{2}+:\\d{2}+"));

我很高兴,我补充说:

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-junit</artifactId>
    <version>2.0.0.0</version>
    <scope>test</scope>
</dependency>

并从 spring-boot-starter-test 中踢出 1.3 hamcrest 依赖项:

<exclusions>
    <exclusion>
       <groupId>org.hamcrest</groupId>
       <artifactId>hamcrest-library</artifactId>
    </exclusion>
    <exclusion>
       <groupId>org.hamcrest</groupId>
       <artifactId>hamcrest-core</artifactId>
    </exclusion>
</exclusions>

现在一切仍在按我预期的那样工作,但我感觉不太舒服。因为我只能找到写 1.3 的人,并不能真正找到 hamcrest-junit 2.0 的用途。

谁能解释一下它们之间的联系?因为 hamcrest-junit 2.0 似乎包含 hamcrest 1.3 的所有内容...

谢谢本

【问题讨论】:

  • 您找不到关于 2.0 和 1.3 之间差异的文档,因为该项目 [已经好几个月没有得到适当的维护][1]。如果一个活跃的提交者接管,那么我们都会知道。谢谢@CoronA。

标签: java junit hamcrest


【解决方案1】:

编辑:几年后答案是使用最新的 Hamcrest 2 版本 (2.2 from 17th October 2019)。有关更多详细信息,请参阅@dschulten's answer

以下是我最初的答案,我将其作为上下文来理解当时 Hamcrest 版本 1.3 和 2.0.0.0 的问题和困惑。


基于 Hamcrest Github

JUnit Lambda (Junit 5)

我的看法

  • hamcrest-junit 2.0(应该)是一个全新的开始,其目标也是将 hamcrest 与 junit 分离
  • 与此同时,Junit 5 项目启动,该项目减少/删除了第三方依赖项

=> 在这种情况下,我认为 hamcrest 人员在大幅推进之前等待/协调 JUnit 5 项目是谨慎的做法。

正如@heenenee 所提到的,hamcrest 的人开始忙于其他事情,所以目前这个项目并没有发生太多事情。

回答

谁能解释一下它们之间的联系?因为似乎 hamcrest-junit 2.0 包含 hamcrest 1.3 的所有内容

  • hamcrest-junit 2.0 开始了,但它背后的人很快就忙于其他项目(现在仍然如此),所以开发停止了
  • JUnit 5 也可能存在一些不确定性,这可能会促使将 hamcrest-junit 2.0 的进一步开发推迟到 JUnit 5 发布(推测)

...但我感觉不太舒服。因为我只能找到写 1.3 的人,并不能真正找到 hamcrest-junit 2.0 的用途。

目前,除了您的情况外,没有太多动力转向 hamcrest-junit 2.0。一旦 Junit 5 发布,我预计会有更多的动力再次前进。

【讨论】:

  • JUnit 5 就在这里,他们将测试框架与断言框架分离。从那时起直到 2018 年,Hamcrest 都没有发布过。另一方面,AspectJ 是不错的选择。
  • @gavenkoa AspectJ 附带了各种附加条件,因此它不是每个项目的可行替代方案。
  • hamcrest 的更新日志现在位于 github.com/hamcrest/JavaHamcrest/blob/master/CHANGES.md
【解决方案2】:

Hamcrest 项目只有released 2.1,他们在thorough consideration 之后有reworked the package structure。确保您关注upgrade procedure。 工件 java-hamcrest 2.0.0.0 现在被认为是failed attempt

【讨论】:

  • 由于投票数少,几乎没有看到这个答案。谢谢更新
【解决方案3】:

Ivo 的回答很好,确实应该获得更多选票,但这里有一些附加信息。如果您检查 Maven 以获取有关依赖项的信息,Java Hamcrest 2.0.0.0Hamcrest JUnit 2.0.0.0,则有一些 usage 链接。在我写这篇文章的时候,分别是 74 个和 68 个,简单浏览一下并没有什么大项目。

【讨论】:

  • 这已经发生了很大的变化,现在有 500 次使用,其中包括一些主要项目......
猜你喜欢
  • 2014-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 2016-11-27
  • 1970-01-01
相关资源
最近更新 更多