【问题标题】:hamcrest core, why need this?hamcrest核心,为什么需要这个?
【发布时间】:2016-05-25 04:24:17
【问题描述】:

我在 Java 中将 JUnit 用于我的 TDD,并注意到有两个组件可以从 JUnit.org 下载。首先,我认为我需要 JUnit 组件并下载、安装。当我编译并尝试运行我的测试时,它抱怨找不到 Hamcrest 类。所以我不得不从他们的主页再次下载这个。

那么,出于好奇,为什么我们从一开始就需要为一个目的下载两次?有谁知道为什么 hamcrest 核心与 JUnit 是分开的,即使它被 JUnit 使用?

谢谢, Javabug

【问题讨论】:

  • 在 Eclipse 或 Intellij 中,您只需将 junit 添加到类路径中即可。我不太确定你手动下载的是什么

标签: java junit hamcrest


【解决方案1】:

JUnit 使用 Hamcrest。过去,JUnit 嵌入了导致问题的 Hamcrest 类,因为项目在不同的周期中发展。在最近的 JUnit 版本中(如果我没记错的话,自 4.11 起),这已经改变并且没有嵌入 Hamcrest。因此,如果您将 JUnit 作为依赖项添加到您的项目(Maven、Gradle 等),您将隐式获得对 Hamcrest 的依赖项。

我相信 Hamcrest 上的这个问题在某种程度上与分裂有关。 https://github.com/hamcrest/JavaHamcrest/issues/92

【讨论】:

  • 太棒了!这很好地解决了我原来的查询。谢谢,@SubOptimal!
【解决方案2】:

org.junit.Assert 类依赖于 Hamcrest 核心库。因为它是静态方法签名assertThat() 的一部分,所以它必须在类路径中。

如果你不喜欢使用它,test runtime 依赖于 hamcrest-core 应该可以工作,如果你想使用它,我推荐 test compilehamcrest-library 的依赖(使用 maven 而不是 gradle 它的所有范围 test)。

没有临时依赖可以更灵活地升级Hamcrest。顺便说一句,Mockito 也有一个 Hamcrest 依赖项。阅读有关Understanding Dependencies 的更多信息。

【讨论】:

  • 非常感谢您提供这些额外信息。尽管我期待其他答案,但它提供的信息非常丰富。但我投票赞成这个答案!
【解决方案3】:

实际上,您希望尽可能多地使用“hamcrest”的东西。

看看assertThat,它大量使用了 hamcrest 匹配器类。

说真的:我现在只是在暴躁中使用 assertThat;而且我从不后悔这样做并完全放弃所有其他断言。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 2016-04-22
    相关资源
    最近更新 更多