Spring Cloud Contract - как проверить простой строковый ответ?

Я использую платформу Spring Cloud Contract для тестирования интеграции служб REST и контрактов связанных клиентских приложений. Он работает для запроса / ответа объекта JSON, но есть ли возможность проверить простую строку. В частности, сервис, ответ на который логический (true или false в теле ответа)?

Часть отличного определения:

response {
    status 200
    headers {
        header('Content-Type', 'application/json;charset=UTF-8')
    }
    body(
        value(client('true'), server(regex("true|false")))
    )
}

Связанная часть сгенерированного теста:

    String responseBody = response.getBody().asString();
    null;

Это ошибка, не так ли? Или мне стоит сделать что-нибудь получше в отличном определении? Первая строка дает возможность генератору понять, что я хочу, но вторая строка полностью отсутствует. Спасибо за подсказку.

P.S. Я знаю, что существуют разные мнения относительно "истинной" достоверности только строки в качестве ответа JSON (некоторые люди так говорят, другие нет). Пожалуйста, не решайте это, а только реальную проблему :-)


person Radek Donat    schedule 28.08.2017    source источник
comment
Это не ошибка, потому что этот JSON полностью недействителен. Попробуйте изменить тип содержимого на sth else, например text/plain, и посмотрите, работает ли он нормально. Если нет, то это действительно ошибка   -  person Marcin Grzejszczak    schedule 28.08.2017
comment
true - это действительный JSON.   -  person C-Otto    schedule 28.08.2017
comment
Вот что я сказал в P.S. Есть много мнений, но я не нашел веской причины, по которой значение, не относящееся к карте / не-массиву, должно быть недопустимым JSON.   -  person Radek Donat    schedule 28.08.2017
comment
IMO, сгенерированный код Java null; в любом случае выглядит как ошибка.   -  person Radek Donat    schedule 28.08.2017


Ответы (2)


Проблема устранена здесь, https://github.com/spring-cloud/spring-cloud-contract/issues/443. В новых выпусках (Dalston.SR5 и Edgware вперед) это больше не будет проблемой.

person Marcin Grzejszczak    schedule 24.10.2017

org.springframework.cloud.contract.spec.Contract.make {request {method 'GET' urlPath ('url')

    body([
             'json-string'
        ])
    headers {
        header('Content-Type', 'application/json;charset=UTF-8')
    }
}
response {
    status 200
    body( "\"true\"" )
} }

Это сработало для меня.

person Veereshwaran Muniraj    schedule 21.08.2018