Я новичок в REST Assured, и моя цель - создать собственный Hamcrest Matcher, который принимает созданный мной объект java (Item; как указано ниже).
Это класс, который расширяет TypeSafeMatcher абстрактный класс.
import net.example.Item;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
public class ItemValidate extends TypeSafeMatcher<Item> {
@Override
protected boolean matchesSafely(Item item) {
// code that verify the Item object
return true;
}
@Override
public void describeTo(Description description) {
description.appendText(" is apple");
}
public static Matcher<Item> itemValidate() {
return new ItemValidate();
}
}
Это реализация класса Item
public class Item {
String key_1;
String key_2;
public Item(String key_1, String key_2) {
this.key_1 = key_1;
this.key_2 = key_2;
}
public String getKey_1() {
return key_1;
}
public void setKey_1(String key_1) {
this.key_1 = key_1;
}
public String getKey_2() {
return key_2;
}
public void setKey_2(String key_2) {
this.key_2 = key_2;
}
}
И это метод тестирования, в котором я его использую.
given()
.contentType(ContentType.JSON)
.body(payLoad)
.pathParam("param_1", "p1")
.pathParam("param21", "p2")
.when()
.post(url + "/process")
.then()
.body("key_0.results[0].item", itemValidate());
Это json тело ответа на вышеуказанный вызов API
{
"key_0": {
"results": [
{
"item": {
"key_1": "red",
"key_2": "apple"
},
"description" : "this is a fruit"
}
]
},
"key_3": "value_3"
}
Но я получаю;
java.lang.AssertionError: 1 expectation failed.
JSON path key_0.results[0].item doesn't match.
Expected: is apple
Actual: {key_1=red, key_2=apple}
Я не понимаю, почему jsonpath неверен в этом. Если тип объекта, который я использую для пользовательского сопоставления, это String (я изменяю jsonpath на key_0.results[0].item.key_2
), он работает отлично. Как я могу использовать java объект, созданный мной в пользовательском сопоставлении?