1
저는 스프링과의 통합 테스트를 작성하고 있습니다. 응답의 json이 필요한 모든 데이터를 포함하고 있는지 확인하고 싶습니다. 참조 코드 :Spring JsonPath는 어떤 순서로든 예외를 포함합니다.
@Test
public void getAll() throws Exception {
String url = "/permissions/all";
int size = 4;
try {
Set<String> permissions = RandomGenerator.randomStrings(size);
initDb(permissions);
mvc.perform(get(url).with(Users.PERMISSIONS_READ))
.andExpect(jsonPath("$[?(@.name)].name", hasSize(size))) //ok
.andExpect(jsonPath("$[?(@.name)].name").value(containsInAnyOrder(permissions))); //exception
} finally {
dropDb();
}
}
그러나 내가 여기에 예외를 받고 있어요 :
java.lang.AssertionError: JSON path "$[?(@.name)].name"
Expected: iterable over [<[b0ce9e8a-8b62-41f4-91b9-d9cf6ff96675, 7ebe3a4f-7864-4ea5-92b3-a5ad6f44bf42, 7df2fa88-b22f-4d33-91b2-f8b00813522f, 17b61119-c48c-4dff-ac9c-047eb3efcc43]>] in any order
but: Not matched: "7df2fa88-b22f-4d33-91b2-f8b00813522f"
그리고이 응답의 데이터 :
[{
"id": 1,
"name": "7df2fa88-b22f-4d33-91b2-f8b00813522f"
}, {
"id": 2,
"name": "b0ce9e8a-8b62-41f4-91b9-d9cf6ff96675"
}, {
"id": 3,
"name": "7ebe3a4f-7864-4ea5-92b3-a5ad6f44bf42"
}, {
"id": 4,
"name": "17b61119-c48c-4dff-ac9c-047eb3efcc43"
}]
내가 아는, $[?(@.name)].name
잘 작동하는 선택을하고, 다음 결과를 반환합니다.
[
"7df2fa88-b22f-4d33-91b2-f8b00813522f",
"b0ce9e8a-8b62-41f4-91b9-d9cf6ff96675",
"7ebe3a4f-7864-4ea5-92b3-a5ad6f44bf42",
"17b61119-c48c-4dff-ac9c-047eb3efcc43"
]
permissions
세트도 정확하며 위의 샘플과 같이 4 개의 문자열을 포함합니다.
누군가 내가 여기서 뭘 잘못하고 있는지 말해 줄 수 있습니까?
Set<String> permissions = RandomGenerator.randomStrings(size);
initDb(permissions);
mvc.perform(get(url).with(Users.PERMISSIONS_READ))
.andExpect(jsonPath("$[?(@.name)].name", hasSize(size))) //ok
.andExpect(jsonPath("$[?(@.name)].name").value(containsInAnyOrder(permissions.toArray(new String[permissions.size()]))));
또는 재 작성 :
감사합니다. 예, 작동합니다. –