当前位置: 首页 > 知识库问答 >
问题:

是否有适用于java的Hamcrest Matcher。util。可选择的

曹建华
2023-03-14

我正在寻找一个Hamcrest Matcher到返回java的单元测试方法。util。可选类型。比如:

    @Test
    public void get__Null(){

        Optional<Element> element = Element.get(null);      
        assertThat( sasi , isEmptyOptional());
    }

    @Test
    public void get__GetCode(){

        Optional<Element> element = Element.get(MI_CODE);       
        assertThat( sasi , isOptionalThatMatches(allOf(hasproperty("code", MI_CODE),
                                                       hasProperty("id",   notNullValue())));
    }

是否有任何可用的实现抛出Maven存储库?

共有3个答案

吕皓
2023-03-14

目前我有以下信息:

  • 在hamcrest网站上有一个问题和一个特性建议,可以用其他Java 8类型来支持它
  • 一个用户创建了一个,并在他的GitHub上发布了一个示例。仍然不在Maven上,但正在努力
鲁永福
2023-03-14

纳伦德拉·帕泰的Hamcrest选装件确实做得很好。

import static com.github.npathai.hamcrestopt.OptionalMatchers.isEmpty;
import static com.github.npathai.hamcrestopt.OptionalMatchers.isPresent;
import static com.github.npathai.hamcrestopt.OptionalMatchers.isPresentAnd;
import static com.github.npathai.hamcrestopt.OptionalMatchers.isPresentAndIs;
import static org.hamcrest.Matchers.startsWith;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
  @Test
  public void testOptionalValue() {
    Optional<String> option = Optional.of("value");
    assertTrue(option.isPresent()); // the old-fashioned, non-diagnosable assertion
    assertThat(option, isPresent());
    assertThat(option, isPresentAndIs("value"));
    assertThat(option, isPresentAnd(startsWith("v")));
    assertThat(option, isEmpty()); // fails
  }

上面的最后一个断言失败,并生成良好的可诊断消息:

java.lang.AssertionError: 
Expected: is <Empty>
     but: had value "value"

在Maven上可用:

<dependency>
  <groupId>com.github.npathai</groupId>
  <artifactId>hamcrest-optional</artifactId>
  <version>2.0.0</version>
  <scope>test</scope>
</dependency>
公西国发
2023-03-14

目前JavaHamcrest使用1.6版本,并与许多使用旧版本Java的项目集成。

因此,与Java8相关的特性将添加到与Java8兼容的未来版本中。提出的解决方案是有一个支持它的扩展库,这样任何需要的人都可以使用扩展库。

我是Hamcrest Optional的作者,现在可以在Maven central上找到它。

示例:检查可选项是否包含以某个值开头的字符串

import static com.github.npathai.hamcrestopt.OptionalMatchers.hasValue;
import static org.hamcrest.Matchers.startsWith;

Optional<String> optional = Optional.of("dummy value");
assertThat(optional, hasValue(startsWith("dummy")));
 类似资料:
  • 声明函数以映射值并在存在值时使用它们是很方便的。 在您有几个强制对象和几个可选对象的情况下,我发现自己将其他对象包装为可选对象。也可以使用(mandatoryObject),这样我就可以在它们上使用相同的表达式,而不必全部倒写。 但是我不喜欢这个代码: 所以我把它包装起来: 但这是错误的,因为蔬菜(在这个例子中)实际上不是可选的。它们非常重要,我只是给每个人的印象是它们是可选的。 所以我的问题是:

  • 我使用jaxb2 maven插件从给定的XSD生成JaxB类。它很好用。但现在我想使用java。util。在生成的类中是可选的。但是JaxB生成的类没有可选项。所以我不得不对每个变量进行空检查。 有人知道必须如何配置jaxb2 maven插件才能使用java吗。util。可选择的 谢谢你的帮助!

  • 问题内容: 是否有Java 的软件包管理器,如Python的easy_install? 我正在寻找可从命令行而不是从IDE使用的解决方案。 问题答案: Maven确实基于可浏览,可搜索的远程 存储库* (如中央 存储库) 提供 依赖项管理 。 * Maven Ant Tasks (已淘汰) 使用Maven的存储库提供依赖项管理以及对Ant构建的更多支持。 Ant Ivy是Maven Ant Tas

  • 问题内容: CSS中是否有类似!=(不相等)的内容?例如,我有以下代码: 但是对于某些输入,我需要使此无效。我想通过在输入标签中添加“重置”类来做到这一点,例如 然后只需从CSS跳过此标签即可。 我该怎么做? 我能看到的唯一方法是在输入标签中添加一些类,然后按如下所示重写CSS: 问题答案: 在CSS3中,您可以使用过滤器, 但是并不是所有的浏览器都完全支持CSS3,因此请确保您知道自己正在做什么

  • 问题内容: 我试图在我的Python编程中使用一些AOP,但是我对现有的各种库没有任何经验。 所以我的问题是: Python有哪些AOP支持?两者之间的差异库有什么优势? 编辑 我找到了一些,但我不知道它们的比较: Aspyct 适用于Python的轻量级AOP 编辑2 我将在哪种情况下使用这些? 我有两个用Python编写的应用程序,它们通常具有计算税金和其他金钱事物的方法。我希望能够编写功能的

  • 我想知道的所有值是否为空。除了必须检查映射中每个条目中的值之外,还有什么是最好的方法?