【发布时间】:2017-10-19 07:19:57
【问题描述】:
我正在尝试测试以下代码部分。尤其是抓住:
try {
preAuthCompleteResponse = preAuthCompleteClient
.getPreAuthCompleteResponse(preAuthCompleteServiceImpl.getPreAuthComplete(
preAuthCompleteRequestServiceImpl.getPreAuthCompleteRequest(preAuthCompleteModel)));
} catch (IOException | MarshalSendAndReceiveException e) {
logger.error(e.getMessage(), e);
return new ResponseEntity<>(
new SvsTransactionResponseModel(HttpStatus.BAD_REQUEST, e.getMessage()),
HttpStatus.BAD_REQUEST);
}
在一个测试中,我希望 IOException 被捕获,而在另一个测试中,我希望 MarshalSendAndReceiveException 被捕获。然后两者都返回SvsTransactionResponseModel,状态为HttpStatus.BAD_REQUEST。
preAuthCompleteClient.getPreAuthCompleteResponse 方法抛出 MarshalSendAndReceiveException 和 preAuthCompleteRequestServiceImpl.getPreAuthCompleteRequest 抛出 IOException。
我的测试是这样的:
@RunWith(MockitoJUnitRunner.class)
public class PreAuthCompleteControllerTest {
@Mock
private PreAuthCompleteService preAuthCompleteServiceImpl;
@Mock
private PreAuthCompleteRequestService preAuthCompleteRequestServiceImpl;
@Mock
private PreAuthCompleteClient preAuthCompleteClient;
@Mock
private Errors errors;
private PreAuthCompleteController preAuthCompleteController;
@Before
public void setUp() {
preAuthCompleteController = new PreAuthCompleteController(preAuthCompleteServiceImpl,
preAuthCompleteRequestServiceImpl, preAuthCompleteClient);
}
@Test
public void testGetPreAuthCompleteExpectIOException() throws MarshalSendAndReceiveException, IOException {
when(preAuthCompleteClient.getPreAuthCompleteResponse(preAuthCompleteServiceImpl.getPreAuthComplete(
preAuthCompleteRequestServiceImpl.getPreAuthCompleteRequest(new PreAuthCompleteModel()))))
.thenReturn(new PreAuthCompleteResponse());
ResponseEntity<SvsTransactionResponseModel> responseEntity = (ResponseEntity<SvsTransactionResponseModel>) preAuthCompleteController
.getPreAuthComplete(null, errors);
assertTrue(responseEntity.getBody() != null);
assertTrue(responseEntity.getStatusCodeValue() == 400);
}
}
我使用 Mockito.when、Mockito.thenThrow 或 doThrow 等尝试了不同的解决方案。但有不同的例外或不成功的测试。我没主意了。
如何测试异常被捕获并且 ResponseEntity 正确返回。
附:所有的模拟配置工作。
【问题讨论】:
标签: spring unit-testing spring-boot junit mockito