フィールドの順序を比較するHamcrestマッチャーが見つかりませんでしたが、自分で作成するのは簡単です。 JSONパス式の結果はLinkedHashMap
になりますので、LinkedHashMap
を取り込み、指定されたオブジェクトと比較して順番に入力します。 List
のエントリにマップを変換し、List
のequals
メソッドを使用すると、List
のトリックは順番にアイテムを比較します。
private class OrderedMapMatcher extends BaseMatcher<Map<String, String>> {
private LinkedHashMap<String, String> expected;
public OrderedMapMatcher(LinkedHashMap<String, String> expected) {
this.expected = expected;
}
@Override
public boolean matches(Object o) {
if (!(o instanceof LinkedHashMap)) {
return false;
}
LinkedHashMap actual = (LinkedHashMap) o;
List<Map.Entry<String, String>> expectedList = new ArrayList<>(expected.entrySet());
List actualList = new ArrayList(actual.entrySet());
return expectedList.equals(actualList);
}
@Override
public void describeTo(Description description) {
description.appendText(expected.toString());
}
}
そして、ここでアサーションがどのように見えるかです::ここで
はマッチャがどのように見えるかだ
LinkedHashMap<String, String> expectedData = new LinkedHashMap<>();
expectedData.put("field1", "value1");
expectedData.put("field2", "value2");
// mockMvc ResultActions code would be here
.andExpect(jsonPath("$.data", new OrderedMapMatcher(expectedData)));