Получение «JSON path ... not match» при запуске REST Assured custom Hamcrest matcher - PullRequest
2 голосов
/ 28 апреля 2020

Я новичок в 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 объект, созданный мной в пользовательском сопоставлении?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...