Я провожу модульное тестирование метода обслуживания, в котором (ложный) шаблон отдыха используется для отправки запроса другому сервису.Он имеет свойство @HystrixCommand для вызова резервного метода, если это необходимо.В тесте это работает, как я, за исключением того, что, когда шаблон оставшегося значения возвращает неверный запрос, вызывается резервный метод.Тем не менее, я попытался выполнить модульное тестирование и вручную заставить шаблон макета остатка вернуть Http 400 Bad Request.Я удивился, увидев, что это не запускает запасной вариант Hystrix.Кто-нибудь знает почему?
@Autowired
private RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "fallback")
public SomeResponse restCall(SomeRequest request) {
HttpEntity<Object> httpEntityRequest = new HttpEntity<>(request);
ResponseEntity<R> response = restTemplate.exchange(
"http://localhost:5000/otherservice,
HttpMethod.POST,
httpEntityRequest,
responseClass);
if (response != null)
return response.getBody();
else
return new SomeResponse();
}
private SomeResponse fallback(SomeRequest request) {
log.error("Log Error);
return null;
}
Мой юнит-тест:
@Mock
private Appender<ILoggingEvent> mockAppender;
@Captor
private ArgumentCaptor<LoggingEvent> captorLoggingEvent;
@MockBean
private RestTemplate mockRestTemplate;
@Autowired
private SomeService service;
@Before
public void setUp() {
Logger logger = (Logger)
LoggerFactory.getLogger(SomeServiceTest.class);
logger.addAppender(mockAppender);
}
@Test
public void restCallTest() {
ResponseEntity<SomeResponse> response = new ResponseEntity<>(HttpStatus.BAD_REQUEST);
when(mockRestTemplate.exchange(anyString(), any(), any(), eq(BannerResponse.class))).thenReturn(response);
SomeResponse someResponse = service.fallback(new SomeRequest());
verify(mockRestTemplate, times(1)).exchange(anyString(), any(), any(), eq(SomeResponse.class));
verify(mockAppender).doAppend(captorLoggingEvent.capture());
assertThat(captorLoggingEvent.getValue().toString(), containsString("Log error"));
assertNull(someResponse);
}
С уважением,