Mock MVC. Тело ответа#

Интеграция Neptune и Mock MVC имеет дополнительные опции, связанные с работой с сериализованным / десериализованным телом ответа и его валидацией.

Важно:

Использование java-объектов для описания ожидаемого тела ответа#

import static ru.tinkoff.qa.neptune.spring.mock.mvc
    .GetMockMvcResponseResultSupplier.response;
import static ru.tinkoff.qa.neptune.spring.mock.mvc.MockMvcContext.mockMvcGet;

@SpringBootTest
@AutoConfigureMockMvc
public class MyTest {

    @Test(destription = "Пример с дефолтным сериализатором")
    public void myTest1() {
        mockMvcGet(
            response(post("/some/path")
                .contentType(APPLICATION_JSON)
                .content("{\"someString\":\"1\"}"))
                //указываем dto в качестве ожидаемого тела ответа
                .expectContent(new SomeResponseDTO())
        );
    }

    @Test(destription = "Пример с указанием сериализатора")
    public void myTest2() {
        mockMvcGet(
            response(post("/some/path")
                .contentType(APPLICATION_JSON)
                .content("{\"someString\":\"1\"}"))
                //указываем dto в качестве ожидаемого тела ответа
                .expectContent(new SomeResponseDTO(),
                    //и указываем сериализатор
                    new MyDataTransformer())
        );
    }
}

Получение тела ответа#

В виде текста#

import static ru.tinkoff.qa.neptune.spring.mock.mvc
    .GetMockMvcResponseResultSupplier.response;
import static ru.tinkoff.qa.neptune.spring.mock.mvc.MockMvcContext.mockMvcGet;

@SpringBootTest
@AutoConfigureMockMvc
public class MyTest {

    @Test
    public void myTest() {
        String body = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания
                //ответа
                //
                //указываем что нужно просто получить текстовое 
                .thenGetStringContent() //содержимое тела ответа
                //Можно указать один или несколько критериев, 
                //которым должно соответствовать
                //текстовое содержимое тела ответа.
                // Так же доступны criteriaOr(criteria...), 
                // criteriaOnlyOne(criteria...)
                // criteriaNot(criteria...)
                .criteria("Описание критерия получаемого текста", s -> {
                    /*предикат, как работает критерий*/
                })
                //Можно указать, что должно быть выброшено исключение,
                .throwOnNoResult()); // если у ответа нет тела или тело 
        // не соответствует перечисленным критериям
    }
}

В виде java-объекта#

Примеры с дефолтным десериализатором

import static ru.tinkoff.qa.neptune.spring.mock.mvc
    .GetMockMvcResponseResultSupplier.response;
import static ru.tinkoff.qa.neptune.spring.mock.mvc.MockMvcContext.mockMvcGet;

@SpringBootTest
@AutoConfigureMockMvc
public class MyTest {

    @Test
    public void myTest1() {
        Dto body = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                //класс десериализованного тела
                .thenGetBody(Dto.class)
                //Можно указать один или несколько критериев, 
                //которым должно соответствовать
                //десериализованое тело ответа.
                // Так же доступны criteriaOr(criteria...), 
                // criteriaOnlyOne(criteria...)
                // criteriaNot(criteria...)
                .criteria("Описание критерия, " +
                    "которому должно соответствовать тело", dto -> {
                    /*предикат, как работает критерий*/
                })
                //Можно указать, что должно быть выброшено исключение, 
                .throwOnNoResult()); // если у ответа нет тела 
        // или оно десериализовалось в объект, 
        // который не соответствует перечисленным критериям

        GenericDto<SomeType> body2 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                //тип десериализованного тела
                .thenGetBody(new TypeReference<GenericDto<SomeType>>() {})
                //
                //прочие параметры
        );

        String value = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                //описание объекта, который следует получить 
                .thenGetValue("Value of the field 'stringValue'",
                    //класс десериализованного тела
                    Dto.class,
                    //описание получаемого результата в виде функции
                    Dto::getStringValue)
                //
                //прочие параметры
        );

        String value2 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetValue("Value of the field 'stringValue'",
                    //тип десериализованного тела
                    new TypeReference<GenericDto<SomeType>>() {},
                    GenericDto::getStringValue)
                //
                //прочие параметры
        );
    }
}

Примеры с указанием десериализатора

import static ru.tinkoff.qa.neptune.spring.mock.mvc
    .GetMockMvcResponseResultSupplier.response;
import static ru.tinkoff.qa.neptune.spring.mock.mvc.MockMvcContext.mockMvcGet;

@SpringBootTest
@AutoConfigureMockMvc
public class MyTest {

    @Test
    public void myTest2() {
        Dto body = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetBody(
                    //указываем десериализатор
                    new MyDataTransformer(),
                    Dto.class)
                //
                //прочие параметры
        );

        GenericDto<SomeType> body2 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetBody(
                    new MyDataTransformer(),
                    new TypeReference<GenericDto<SomeType>>() {})
                //
                //прочие параметры
        );

        String value = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetValue("Value of the field 'stringValue'",
                    new MyDataTransformer(),
                    Dto.class,
                    Dto::getStringValue)
                //
                //прочие параметры
        );

        String value2 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetValue("Value of the field 'stringValue'",
                    new MyDataTransformer(),
                    new TypeReference<GenericDto<SomeType>>() {},
                    GenericDto::getStringValue)
                //
                //прочие параметры
        );
    }
}

Как List#

Примеры с дефолтным десериализатором

import java.util.List;

import static ru.tinkoff.qa.neptune.spring.mock.mvc
    .GetMockMvcResponseResultSupplier.response;
import static ru.tinkoff.qa.neptune.spring.mock.mvc.MockMvcContext.mockMvcGet;

@SpringBootTest
@AutoConfigureMockMvc
public class MyTest {

    @Test
    public void myTest1() {
        List<Dto> body = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                //описание или название листа, 
                // который следует получить
                .thenGetList("List of dto's",
                    //класс десериализованного тела
                    DtoList.class) //public class DtoList 
                // extends ArrayList<Dto>
                //
                //
                //прочие параметры
        ); 

        List<Dto> body2 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetList("List of dto's",
                    //тип десериализованного тела
                    new TypeReference<List<Dto>>() {})
            //
            //прочие параметры
        );

        List<Object> value = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetList("Value of the field 'listValue'",
                    //класс десериализованного тела
                    Dto.class,
                    //описание получения листа в виде функции
                    Dto::listValue)
            //
            //прочие параметры
        );

        List<Object> value2 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetList("Value of the field 'listValue'",
                    //тип десериализованного тела
                    new TypeReference<GenericDto<SomeType>>() {},
                    GenericDto::listValue)
            //
            //прочие параметры
        );
    }
}
Уточняющие параметры шага, который возвращает лист. Шаг не предусматривает время на ожидание
//Можно указать один или несколько критериев,
//которым должен соответствовать
//каждый элемент результирующего листа.
// Так же доступны criteriaOr(criteria...),
// criteriaOnlyOne(criteria...)
// criteriaNot(criteria...)
.criteria("Описание критерия, которому должен соответствовать " +
    "каждый элемент, который попадет в результирующий лист", item -> {
    /*предикат, как работает критерий*/
})
//-------------------------------------------
//Можно указать, что должно быть выброшено исключение,
// если непустой лист не удалось получить (не было ни одного элемента,
//который бы соответствовал перечисленным критериям,
// или непустой лист просто не был получен)
.throwOnNoResult()
//ТАКЖЕ ЕСТЬ СЛЕДУЮЩИЕ ОПЦИИ:
//-------------------------------------------
//1. можно указать сколько объектов,
//которые соответствуют критериям,
//нужно вернуть
.returnListOfSize(3)
//-------------------------------------------
//2. можно указать, до элемента с каким индексом
//нужно собрать результирующие элементы,
//индекс - индекс объекта в наборе элементов,
//которые соответствуют критериям
.returnBeforeIndex(7)
//.returnAfterIndex(8) либо после какого элемента
//----------------------------------------------
//3. Либо можно перечислить индексы элементов,
// которые следует вернуть.
//Индексы - индексы объектов в наборе элементов,
//которые соответствуют критериям
.returnItemsOfIndexes(0, 3, 5)
//-------------------------------------------
//4. можно указать, при достижении какого количества
//ВСЕХ объектов, которые соответствуют критериям,
//должен быть возвращен результат
.returnIfEntireSize(isEqual(8))
//-------------------------------------------
//5. можно указать, при достижении каких условий,
//которым должен соответствовать лист ВСЕХ объектов,
//соответствующих критериям,
//можно возвращать результирующий лист/суб-лист
.returnOnCondition("Описание условия", list -> {
    /*предикат, как работает критерий*/
})
//так же доступны returnOnConditionOr(criteria...),
// returnOnConditionOnlyOne(criteria...)
// returnOnConditionNot(criteria...)
//------------------------------------------
//Если не нашлось столько подходящих объектов, чтобы вернуть результат,
//или весь суб-лист подходящих по критериям элементов,
// который должен вернуться как результат,
// не соответствует каким-то критериям -
// будет выброшено исключение с подробным описанием

Примеры с указанием десериализатора

import java.util.List;

import static ru.tinkoff.qa.neptune.spring.mock.mvc
    .GetMockMvcResponseResultSupplier.response;
import static ru.tinkoff.qa.neptune.spring.mock.mvc.MockMvcContext.mockMvcGet;

@SpringBootTest
@AutoConfigureMockMvc
public class MyTest {

    @Test
    public void myTest1() {
        List<Dto> body = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetList("List of dto's",
                    //указываем десериализатор
                    new MyDataTransformer(),
                    DtoList.class)
            //
            //прочие параметры
        );

        List<Dto> body2 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetList("List of dto's",
                    new MyDataTransformer(),
                    new TypeReference<List<Dto>>() {})
            //
            //прочие параметры
        );

        List<Object> value = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetList("Value of the field 'listValue'",
                    new MyDataTransformer(),
                    Dto.class,
                    Dto::listValue)
            //
            //прочие параметры
        );

        List<Object> value2 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetList("Value of the field 'listValue'",
                    new MyDataTransformer(),
                    new TypeReference<GenericDto<SomeType>>() {},
                    GenericDto::listValue)
            //
            //прочие параметры
        );
    }
}

Как массив#

Примеры с дефолтным десериализатором

import static ru.tinkoff.qa.neptune.spring.mock.mvc
    .GetMockMvcResponseResultSupplier.response;
import static ru.tinkoff.qa.neptune.spring.mock.mvc.MockMvcContext.mockMvcGet;

@SpringBootTest
@AutoConfigureMockMvc
public class MyTest {

    @Test
    public void myTest1() {
        Dto[] body = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                //описание или название массива, 
                // который следует получить
                .thenGetArray("Array of dto's",
                    //класс десериализованного тела
                    Dto[].class)
                //
                //прочие параметры
        );

        GenericDto<SomeType>[] body2 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetArray("Array of dto's",
                    //тип десериализованного тела
                    new TypeReference<GenericDto<SomeType>[]>() {})
                //
                //прочие параметры
        );

        Object[] value = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetArray("Value of the field 'arrayValue'",
                    //класс десериализованного тела
                    Dto.class,
                    //описание получения массива в виде функции
                    Dto::arrayValue)
                //
                //прочие параметры
        );

        Object[] value2 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetArray("Value of the field 'arrayValue'",
                    //тип десериализованного тела
                    new TypeReference<GenericDto<SomeType>>() {},
                    GenericDto::arrayValue)
                //
                //прочие параметры
        );
    }
}
Уточняющие параметры шага, который возвращает массив. Шаг не предусматривает время на ожидание
//Можно указать один или несколько критериев,
//которым должен соответствовать
//каждый элемент результирующего массива.
// Так же доступны criteriaOr(criteria...),
// criteriaOnlyOne(criteria...)
// criteriaNot(criteria...)
.criteria("Описание критерия, которому должен соответствовать " +
    "каждый элемент, который попадет в результирующий массив", item -> {
    /*предикат, как работает критерий*/
})
//------------------------------------------
//Можно указать, что должно быть выброшено исключение,
// если непустой массив не удалось получить (не было ни одного элемента,
//который бы соответствовал перечисленным критериям,
// или непустой массив просто не был получен)
.throwOnNoResult()
//ТАКЖЕ ЕСТЬ СЛЕДУЮЩИЕ ОПЦИИ:
//------------------------------------------
//1. можно указать сколько объектов,
//которые соответствуют критериям,
//нужно вернуть
.returnArrayOfLength(3)
//-------------------------------------------
//2. можно указать, до элемента с каким индексом
//нужно собрать результирующие элементы,
//индекс - индекс объекта в наборе элементов,
//которые соответствуют критериям
.returnBeforeIndex(7)
//.returnAfterIndex(8) либо после какого элемента
//----------------------------------------------
//3. Либо можно перечислить индексы элементов,
// которые следует вернуть.
//Индексы - индексы объектов в наборе элементов,
//которые соответствуют критериям
.returnItemsOfIndexes(0, 3, 5)
//-----------------------------------------------
//4. можно указать, при достижении какого количества
//ВСЕХ объектов, которые соответствуют критериям,
//должен быть возвращен результат
.returnIfEntireLength(isEqual(8))
//------------------------------------------
//5. можно указать, при достижении каких условий,
//которым должен соответствовать массив ВСЕХ объектов,
//соответствующих критериям,
//можно возвращать результирующий массив/суб-массив
.returnOnCondition("Описание условия", array -> {
    /*предикат, как работает критерий*/
})
//так же доступны returnOnConditionOr(criteria...),
// returnOnConditionOnlyOne(criteria...)
// returnOnConditionNot(criteria...)
//------------------------------------------
//Если не нашлось столько подходящих объектов, чтобы вернуть результат,
//или весь суб-массив подходящих по критериям элементов,
// который должен вернуться как результат,
// не соответствует каким-то критериям -
// будет выброшено исключение с подробным описанием

Примеры с указанием десериализатора

import static ru.tinkoff.qa.neptune.spring.mock.mvc
    .GetMockMvcResponseResultSupplier.response;
import static ru.tinkoff.qa.neptune.spring.mock.mvc.MockMvcContext.mockMvcGet;

@SpringBootTest
@AutoConfigureMockMvc
public class MyTest {

    @Test
    public void myTest1() {
        Dto[] body = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetArray("Array of dto's",
                    //указываем десериализатор
                    new MyDataTransformer(),
                    Dto[].class)
                //
                //прочие параметры
        );

        GenericDto<SomeType>[] body2 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetArray("Array of dto's",
                    new MyDataTransformer(),
                    new TypeReference<GenericDto<SomeType>[]>() {})
                //
                //прочие параметры
        );

        Object[] value = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetArray("Value of the field 'arrayValue'",
                    new MyDataTransformer(),
                    Dto.class,
                    Dto::arrayValue)
                //
                //прочие параметры
        );

        Object[] value2 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetArray("Value of the field 'arrayValue'",
                    new MyDataTransformer(),
                    new TypeReference<GenericDto<SomeType>>() {},
                    GenericDto::arrayValue)
                //
                //прочие параметры
        );
    }
}

Как элемент Iterable#

Примеры с дефолтным десериализатором

import static ru.tinkoff.qa.neptune.spring.mock.mvc
    .GetMockMvcResponseResultSupplier.response;
import static ru.tinkoff.qa.neptune.spring.mock.mvc.MockMvcContext.mockMvcGet;

@SpringBootTest
@AutoConfigureMockMvc
public class MyTest {

    @Test
    public void myTest1() {
        Dto iterableItem = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                //описание объекта, который следует получить
                .thenGetValueFromIterable("A value from list of dto's",
                    //класс десериализованного тела
                    DtoList.class) //public class DtoList 
                //
                //прочие параметры            
        );

        Dto iterableItem2 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetValueFromIterable("A value from list of dto's",
                    //тип десериализованного тела
                    new TypeReference<List<Dto>>() {})
                //
                //прочие параметры
        );

        Object iterableItem3 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetValueFromIterable("A value from  the field 'listValue'",
                    //класс десериализованного тела
                    Dto.class,
                    //описание получения листа в виде функции
                    Dto::listValue)
                //
                //прочие параметры
        );

        Object iterableItem4 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetValueFromIterable("A value from  the field 'listValue'",
                    //тип десериализованного тела
                    new TypeReference<GenericDto<SomeType>>() {},
                    GenericDto::listValue)
                //
                //прочие параметры
        );
    }
}
Уточняющие параметры шага, который возвращает элемент Iterable. Шаг не предусматривает время на ожидание
//Можно указать один или несколько критериев,
//которым должен соответствовать
//результирующий элемент из набора.
// Так же доступны criteriaOr(criteria...),
// criteriaOnlyOne(criteria...)
// criteriaNot(criteria...)
.criteria("Описание критерия, которому должен соответствовать " +
    "результирующий элемент из набора", item -> {
    /*предикат, как работает критерий*/
})
//------------------------------------------
//Можно указать, что должно быть выброшено исключение,
// если не был получен результирующий элемент (не было ни одного элемента,
//который бы соответствовал перечисленным критериям,
// или непустой набор просто не был получен)
.throwOnNoResult()
//ТАКЖЕ ЕСТЬ СЛЕДУЮЩИЕ ОПЦИИ:
//------------------------------------------
//1. Можно указать индекс элемента, который следует вернуть.
//Индекс - индекс объекта в наборе элементов,
//которые соответствуют критериям
.returnItemOfIndex(1)
//-----------------------------------------------
//2. можно указать, при достижении какого количества
//ВСЕХ объектов, которые соответствуют критериям,
//должен быть возвращен результат
.returnIfEntireSize(isEqual(8))
//------------------------------------------
//3. можно указать, при достижении каких условий,
//которым должен соответствовать набор ВСЕХ объектов,
//соответствующих критериям,
//можно возвращать результирующий элемент
.returnOnCondition("Описание условия", iterable -> {
    /*предикат, как работает критерий*/
})
//так же доступны returnOnConditionOr(criteria...),
// returnOnConditionOnlyOne(criteria...)
// returnOnConditionNot(criteria...)
//------------------------------------------
//Если не нашлось столько подходящих объектов, чтобы вернуть результат,
//или весь набор подходящих по критериям элементов,
// из которого должен быть взят результат,
// не соответствует каким-то критериям -
// будет выброшено исключение с подробным описанием

Примеры с указанием десериализатора

import static ru.tinkoff.qa.neptune.spring.mock.mvc
    .GetMockMvcResponseResultSupplier.response;
import static ru.tinkoff.qa.neptune.spring.mock.mvc.MockMvcContext.mockMvcGet;

@SpringBootTest
@AutoConfigureMockMvc
public class MyTest {

    @Test
    public void myTest1() {
        Dto iterableItem = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetValueFromIterable("A value from list of dto's",
                    //указываем десериализатор
                    new MyDataTransformer(),
                    DtoList.class)
                //
                //прочие параметры
        );

        Dto iterableItem2 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetValueFromIterable("A value from list of dto's",
                    new MyDataTransformer(),
                    new TypeReference<List<Dto>>() {})
                //
                //прочие параметры
        );

        Object iterableItem3 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetValueFromIterable("A value from  the field 'listValue'",
                    new MyDataTransformer(),
                    Dto.class,
                    Dto::listValue)
                //
                //прочие параметры
        );

        List<Object> iterableItem4 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetValueFromIterable("A value from  the field 'listValue'",
                    new MyDataTransformer(),
                    new TypeReference<GenericDto<SomeType>>() {},
                    GenericDto::listValue)
                //
                //прочие параметры
        );
    }
}

Как элемент массива#

Примеры с дефолтным десериализатором

import static ru.tinkoff.qa.neptune.spring.mock.mvc
    .GetMockMvcResponseResultSupplier.response;
import static ru.tinkoff.qa.neptune.spring.mock.mvc.MockMvcContext.mockMvcGet;

@SpringBootTest
@AutoConfigureMockMvc
public class MyTest {

    @Test
    public void myTest1() {
        Dto arrayItem = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                //описание объекта, который следует получить
                .thenGetValueFromArray("A value from array of dto's",
                    //класс десериализованного тела
                    Dto[].class)
                //
                //прочие параметры
        ); 

        GenericDto<SomeType> arrayItem2 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetValueFromArray("A value from array of dto's",
                    //тип десериализованного тела
                    new TypeReference<GenericDto<SomeType>[]>() {})
                //
                //прочие параметры
        );

        Object arrayItem3 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetValueFromArray("A value from  the field 'arrayValue'",
                    //класс десериализованного тела
                    Dto.class,
                    //описание получения массива в виде функции
                    Dto::arrayValue)
                //
                //прочие параметры
        );

        Object arrayItem4 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetValueFromArray("A value from  the field 'arrayValue'",
                    //тип десериализованного тела
                    new TypeReference<GenericDto<SomeType>>() {},
                    GenericDto::arrayValue)
                //
                //прочие параметры
        );
    }
}
Уточняющие параметры шага, который возвращает элемент массива. Шаг не предусматривает время на ожидание
//Можно указать один или несколько критериев,
//которым должен соответствовать
//результирующий элемент из массива.
// Так же доступны criteriaOr(criteria...),
// criteriaOnlyOne(criteria...)
// criteriaNot(criteria...)
.criteria("Описание критерия, которому должен соответствовать " +
    "результирующий элемент из массива", item -> {
    /*предикат, как работает критерий*/
})
//-----------------------------------------------
//Можно указать, что должно быть выброшено исключение,
// если не был получен результирующий элемент (не было ни одного элемента,
// который бы соответствовал перечисленным критериям,
// или непустой массив просто не был получен)
.throwOnNoResult()
//ТАКЖЕ ЕСТЬ СЛЕДУЮЩИЕ ОПЦИИ:
//-----------------------------------------------
//1. Можно указать индекс элемента, который следует вернуть.
//Индекс - индекс объекта в наборе элементов,
//которые соответствуют критериям
.returnItemOfIndex(1)
//-----------------------------------------------
//2. можно указать, при достижении какого количества
//ВСЕХ объектов, которые соответствуют критериям,
//должен быть возвращен результат
.returnIfEntireLength(isEqual(8))
//-----------------------------------------------
//3. можно указать, при достижении каких условий,
//которым должен соответствовать набор ВСЕХ объектов,
//соответствующих критериям,
//можно возвращать результирующий элемент
.returnOnCondition("Описание условия", array -> {
    /*предикат, как работает критерий*/
})
//так же доступны returnOnConditionOr(criteria...),
// returnOnConditionOnlyOne(criteria...)
// returnOnConditionNot(criteria...)
//------------------------------------------
//Если не нашлось столько подходящих объектов, чтобы вернуть результат,
//или весь суб-массив подходящих по критериям элементов,
// из которого должен быть взят результат,
// не соответствует каким-то критериям -
// будет выброшено исключение с подробным описанием

Примеры с указанием десериализатора

import static ru.tinkoff.qa.neptune.spring.mock.mvc
    .GetMockMvcResponseResultSupplier.response;
import static ru.tinkoff.qa.neptune.spring.mock.mvc.MockMvcContext.mockMvcGet;

@SpringBootTest
@AutoConfigureMockMvc
public class MyTest {

    @Test
    public void myTest1() {
        Dto arrayItem = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetValueFromArray("A value from array of dto's",
                    //указываем десериализатор
                    new MyDataTransformer(),
                    Dto[].class)
                //
                //прочие параметры
        );

        GenericDto<SomeType> arrayItem2 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetValueFromArray("A value from array of dto's",
                    new MyDataTransformer(),
                    new TypeReference<GenericDto<SomeType>[]>() {})
                //
                //прочие параметры
        );

        Object arrayItem3 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetValueFromArray("A value from  the field 'arrayValue'",
                    new MyDataTransformer(),
                    Dto.class,
                    Dto::arrayValue)
                //
                //прочие параметры
        );

        Object arrayItem4 = mockMvcGet(
            response(/*параметры запроса*/)
                //указываем ожидания ответа
                //
                .thenGetValueFromArray("A value from  the field 'arrayValue'",
                    new MyDataTransformer(),
                    new TypeReference<GenericDto<SomeType>>() {},
                    GenericDto::arrayValue)
                //
                //прочие параметры
        );
    }
}