Я недавно модернизировал Spring Загрузочный проект от 1,1 до 1,4 и вдруг, тест на «/ здоровье» конечной начал обваливатьсяMockRestServiceServer не обновляет restTemplate по времени для здоровья конечной
@SpringBootTest
class HealthTest extends Specification {
@Autowired
RestTemplate thirdPartyRestTemplate
def 'should set health status based on third party service'() {
given:
MockRestServiceServer thirdPartyServerMock = MockRestServiceServer.createServer(thirdPartyRestTemplate)
thirdPartyServerMock
.expect(MockRestRequestMatchers.requestTo('/status'))
.andExpect(MockRestRequestMatchers.method(HttpMethod.GET))
.andRespond(MockRestResponseCreators.withStatus(thirdPartyServerResponse).body('{}'))
when:
def response = RestAssured.given().get('/health')
println(response.statusCode)
Map health = response.as(Map)
then:
thirdPartyServerMock.verify()
health == expectedHealth
where:
thirdPartyServerResponse | expectedHealth
HttpStatus.OK | [status: 'UP', thirdPartyServer: 'UP']
HttpStatus.SERVICE_UNAVAILABLE | [status: 'DOWN', thirdPartyServer: 'DOWN']
}
}
Что происходит : первый тест всегда проходит, а второй всегда терпит неудачу. Выход 200 200. То же самое происходит, если порядок обратный, так
where:
thirdPartyServerResponse | expectedHealth
HttpStatus.SERVICE_UNAVAILABLE | [status: 'DOWN', thirdPartyServer: 'DOWN']
HttpStatus.OK | [status: 'UP', thirdPartyServer: 'UP']
На этот раз, он терпит неудачу с 503 503. Если добавить Thread.sleep линии до фактического вызова REST, как этот
when:
Thread.sleep(1000)
def response = RestAssured.given().get('/health')
тогда он проходит каждый раз! Итак, похоже, что Spring внес некоторые изменения в MockRestServiceServer
и что для настройки макета требуется некоторое время (возможно, это выполняется в отдельном потоке).
У кого-нибудь была схожая проблема? Как обойти это исправление Thread.sleep и как объяснить это поведение?