【问题标题】:What is the alternative to using the Deprecated Hamcrest method is()?使用已弃用的 Hamcrest 方法 is() 的替代方法是什么?
【发布时间】:2012-09-26 16:23:19
【问题描述】:

我目前使用以下代码对 boolean 值进行断言,但不推荐使用方法 org.hamcrest.Matchers.is()

assertThat(someValue, is(false));

是否有一个简单的替代语法来测试布尔值而不诉诸 assertTrue() 这会给你像“java.lang.AssertionError”这样的糟糕的失败消息


在收到 cmets/answers 后编辑

我最初的担忧是因为 Eclipse 将以下导入语句显示为已弃用

查看Hamcrest API 文档时,is() 方法有 3 个重载变体,其中只有一个已弃用。

因此,为了澄清@mark 的评论和@matt 的答案,我在上面发布的is() 的使用是有效的并且不被弃用。

【问题讨论】:

  • 它没有被弃用,我总是更喜欢 is()equalTo() 的布尔值。但它们是彼此的别名。
  • 您可以包含* 而不是为简洁起见命名每个匹配器并避免警告。
  • @David ...直到您使用“组织导入”
  • @Brad 将Number of static imports needed for .* 设置为1
  • Eclipse 中没有错误。请参阅我对以下已接受答案的评论。有许多名为 is() 的重载方法,只有一些已弃用

标签: java unit-testing hamcrest


【解决方案1】:

你试过equalTo(T)吗?

assertThat(someValue, equalTo(false));

我没有看到 is(T) 已被弃用 - 但是 is(Class) is deprecated。

【讨论】:

  • 感谢您的澄清。你是对的 is(T) 没有被弃用。我看到它的重载兄弟is(Class<T>) 已被弃用,这让我相信is() 的所有用途都已弃用。
【解决方案2】:

我原以为这是一个传递依赖问题,但它实际上只是 Eclipse 中的一个显示问题,它将导入标记为已弃用,因为一个重载的表单是。代码应该可以正常编译,因为导入会暴露所有表单。

已弃用的表单已从源中删除,并且不会在下一个版本 (1.4) 中存在。

原答案

问题在于JUnit includes a set of Hamcrest classes in its JAR。您现在可以使用 junit-dep.jar,但 JUnit 的较新版本(目前为 4.9 和 4.10)省略了它们。

【讨论】:

  • 这是一个问题,但它与这个问题有什么关系?我使用junit-4.11,我仍然得到这个。在 hamcrest-1.3 中提到的所有三种方法都存在。 eclipse 找到它们的顺序中的第一个是已弃用的,而 AFAICT 是 eclipse 标记为已弃用的一个。有趣的是,它位于源文件中其他文件的下方。
  • @aron 我已经更新了我的答案,因为我发现这只是一个 Eclipse 显示问题。
【解决方案3】:

据说,文档中的类匹配器使用instanceOf

http://junit.org/javadoc/latest/org/hamcrest/core/Is.html#isA(java.lang.Class)

is(IOException.class);

将会

is(instanceOf(IOException.class));

例如。

【讨论】:

    【解决方案4】:

    已弃用:

    import static org.junit.Assert.assertThat;
    

    我们可以改用这个:

    import static org.hamcrest.MatcherAssert.assertThat;
    

    【讨论】:

      【解决方案5】:

      这对我来说是 2022 年 1 月

      import static org.hamcrest.CoreMatchers.*;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-13
        • 1970-01-01
        • 2022-01-24
        • 1970-01-01
        相关资源
        最近更新 更多