Ложноположительный результат в потребительских тестах на действительные и недействительные запросы (соответствие нескольким контрактам)

У нас есть случай, когда у нас есть два разных результата на стороне производителя в зависимости от запроса, один - для успеха, а какой - сообщение об ошибке.

Упрощенный образец с двумя контрактами: 1) Contract.make {request {

    method PUT()
    urlPath("/sample")
    headers {
        contentType('application/json')
    }
    body("{\"acc\": \"1234A\" ,\"case\":\"abc23\",\"re\":2018/12/12}")

}


response {
    status BAD_REQUEST()
       }

} 2) Contract.make {request {

    method PUT()
    urlPath("/sample")
    headers {
        contentType('application/json')
    }
    body("{\"acc\": \"1234\" ,\"case\":\"abc23\",\"re\":2018/12/12}")

}


response {
    status 200
       }

}

На стороне потребителя он может соответствовать обоим запросам, поскольку, когда я запускаю тестовый пример недопустимого запроса, он выдает org.springframework.web.client.HttpClientErrorException $ BadRequest: 400 Bad Request

Но для обоих сценариев я могу видеть запрос и соответствующий ответ, я могу видеть в журналах

Может ли кто-нибудь помочь мне в этом?

Спасибо

Это мои потребительские тесты

1) его сценарий запроса на успех, он работает нормально, он получает 200

enter code here
     @Test
     public void should_update_case_sucess() throws Exception {
    RestTemplate restTemplate = new RestTemplate();
    HttpHeaders httpHeaders = new HttpHeaders();
    httpHeaders.add("Content-Type", "application/json");
    ResponseEntity<String> response = restTemplate.exchange(
          "http://localhost:8083//sample",
            HttpMethod.PUT,
            new HttpEntity<>("{\"acc\":\"1234\",\"case\":\"abc23\",\"re\":\"20181212\"}", httpHeaders), String.class);
    BDDAssertions.then(response.getStatusCodeValue()).isEqualTo(200);


}

2) Это сценарий сбоя, который не получает 400 ответов, вместо этого он вызывает ошибку httpclient, он не может вызвать цель

enter code here
   @Test
   public void should_update_case_error() throws Exception {
    RestTemplate restTemplate = new RestTemplate();
    HttpHeaders httpHeaders = new HttpHeaders();
    httpHeaders.add("Content-Type", "application/json");
    ResponseEntity<String> response = restTemplate.exchange(
            "http://localhost:8083//sample",
            HttpMethod.PUT,
            new HttpEntity<>("{\"acc\":\"1234A\",\"caseNumber\":\"abc23\",\"representmentStartDate\":\"20181212\"}", httpHeaders), String.class);

 BDDAssertions.then(response.getStatusCodeValue()).isEqualTo(400);

}

Не могли бы вы помочь мне в этом


person vishnu    schedule 29.04.2019    source источник


Ответы (1)


Это не сработает, потому что wiremock имеет два одинаковых запроса и два разных ответа, поэтому первый выигрывает.

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

person Marcin Grzejszczak    schedule 29.04.2019
comment
Спасибо за быстрый ответ, запрос не совпадает, значение acc отличается в обоих случаях: один успешный, а другой - сбой. - person vishnu; 30.04.2019
comment
Для этих двух запросов я могу видеть как запрос, так и ответ в журналах со стороны потребителя, но действительный запрос работает нормально, может соответствовать, для недопустимого запроса он выбрасывает это конкретное исключение (org.springframework.web.client. HttpClientErrorException $ BadRequest: 400 Плохой запрос) - person vishnu; 30.04.2019
comment
Так в чем именно проблема? - person Marcin Grzejszczak; 30.04.2019
comment
для недопустимого запроса он не получает ответа, он просто выдает ошибку - person vishnu; 30.04.2019
comment
Ваша установка на стороне производственного кода должна быть неправильной. Wiremock сделал то, что должен был делать, если заглушка не сломана - person Marcin Grzejszczak; 01.05.2019
comment
Я могу получить запрос и ответ от заглушек, которые я могу видеть в журналах, но когда я пишу тестовые примеры, соответствующие этому запросу и ответу на стороне потребителя (о чем я упоминал выше), один из тестовых примеров дает сбой. - person vishnu; 01.05.2019
comment
не могли бы вы предоставить больше примеров или docx в Интернете, чтобы предупредить или немного настроить запрос, и как сообщить Wiremock, что это другой запрос, потому что уже в сценарии ошибки я изменил значение acc на 1234A, которое было int на string - person vishnu; 01.05.2019
comment
Извините, я не понимаю, о чем вы говорите. Wiremock понимает, что это два разных запроса. Он ответит должным образом. Вы просто не можете прочитать тело из-за неправильной настройки, я думаю - person Marcin Grzejszczak; 01.05.2019