【问题标题】:Checking specific map value properties (predicate) with Hamcrest (Java 8)使用 Hamcrest (Java 8) 检查特定的地图值属性(谓词)
【发布时间】:2018-09-30 10:28:57
【问题描述】:

使用 AssertJ,我可以检查 Map 是否具有引用值满足特定 Consumer 的键:

@AllArgsConstructor
@Getter
public static class User {
    private Long id;
    private String name;
}

@Test
public void x() {
    Map<String, User> map = new HashMap<>();
    map.put("key", new User(123, "Random Hacker"));
    Assertions.assertThat(map).hasEntrySatisfying("key", __ -> {
        Assertions.assertThat(__.getName()).isEqualTo("Random Hacker");
    });
}

是否可以使用 Hamcrest 检查给定键(以及键/值存在)的特定 Map 值的条件?

注意 public SELF hasEntrySatisfying(K key, Consumer&lt;? super V&gt; valueRequirements) 自 v3.6.0 (2016-11-21) 起已添加到 AspectJ。

【问题讨论】:

    标签: junit4 hamcrest assertj


    【解决方案1】:

    根据Using Hamcrest for testing - Tutorial,hamcrest 中有一个 hasEntry 方法。

    其用法为such:

    org.hamcrest.MatcherAssert.assertThat(myMap, org.hamcrest.Matchers.hasEntry("bar", "foo"))
    

    如果您需要更通用的匹配器,可以使用this 方法:

    例子:

    assertThat(myMap, hasEntry(equalTo("bar"), equalTo("foo")))
    

    可以使用来自 Hamcrest 的任何匹配器或您自己的自定义匹配器来代替“equalTo”。

    【讨论】:

    • 我知道hasEntry(K key, V value)。它涉及equals() 上的keyvalue。在复杂值的情况下,我没有明确的equals,只能检查一些值的属性。我的问题可能不需要直接这样做,但示例 + hasEntrySatisfying 签名显示了这种情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多