如何使用assertj提取地图属性

lho*_*oak 5 java junit assert assertj

我正在使用AssertJ。我有一个像这样的班MyObj。我有一个ListMyObj

Class MyObj {
    ...
    Map<K,V> myMap;
    ...
}
Run Code Online (Sandbox Code Playgroud)

当我使用时:

  1. assertThat(list).extracting("myMap"),我无法使用.containsKey()方法。
  2. 我也尝试使用assertThat(list).extracting("myMap", Map.class),但是它也不起作用。

什么是正确的使用方式?

Fed*_*ede 8

断言映射内容的最简单方法是链接该extracting方法:

    MyObj o1 = new MyObj();
    o1.getMyMap().put("foo", "Hello");
    o1.getMyMap().put("bar", "Bye");
    MyObj o2 = new MyObj();
    o2.getMyMap().put("foo", "Hola");
    o2.getMyMap().put("bar", "Adios");

    List<MyObj> myObjs = Arrays.asList(o1, o2);
    assertThat(myObjs).extracting("myMap").extracting("foo").contains("Hello", "Hola");
    assertThat(myObjs).extracting("myMap").extracting("bar").contains("Bye", "Adios");
Run Code Online (Sandbox Code Playgroud)


小智 7

AssertJ 有 entry() 方法。您可以像这样断言地图值。

assertThat(list)
    .extracting("myMap")
    .contains(entry("foo1", "bar1"), entry("foo2", "bar2"));
Run Code Online (Sandbox Code Playgroud)

这是javadoc:http : //joel-costigliola.github.io/assertj/core/api/org/assertj/core/data/MapEntry.html