Ложно-положительный в потребительских тестах для действительного и недействительного запроса (соответствует нескольким контрактам) - PullRequest
1 голос
/ 29 апреля 2019

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

Упрощенный пример с двумя контрактами: 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) его запрос на успехScenauro работает нормально, он получает 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 Respose, вместо этого он выдает ошибку 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);

}

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

1 Ответ

0 голосов
/ 30 апреля 2019

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

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

...