2017-10-19 9 views
0

次のコード部分をテストしようとしています。特にキャッチ:私はしたいcatch節を入力してテストする方法。 Springブート、Junit、Mockito

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); 
    } 

テスト1でIOExceptionがcatchedされていることを期待し、他のテストでは、私はMarshalSendAndReceiveExceptionがcatchedされることを期待したいです。どちらもステータスHttpStatus.BAD_REQUESTSvsTransactionResponseModelを返します。

preAuthCompleteClient.getPreAuthCompleteResponseメソッドは、MarshalSendAndReceiveExceptionpreAuthCompleteRequestServiceImpl.getPreAuthCompleteRequestIOExceptionをスローするようにスローします。

私のテストは、次のようになります。

@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が正しく返されることをどのようにテストできますか。

P.S.すべての模擬設定が動作します。ダウンその構成部分に私はこの呼び出しを破った事の意味を作るために

答えて

1

...

preAuthCompleteResponse = preAuthCompleteClient 
     .getPreAuthCompleteResponse(preAuthCompleteServiceImpl.getPreAuthComplete(
     preAuthCompleteRequestServiceImpl.getPreAuthCompleteRequest(preAuthCompleteModel))); 

...:

PreAuthCompleteRequest preAuthCompleteRequest = preAuthCompleteRequestServiceImpl.getPreAuthCompleteRequest(preAuthCompleteModel); 

PreAuthComplete preAuthComplete = preAuthCompleteServiceImpl.getPreAuthComplete(preAuthCompleteRequest); 

PreAuthCompleteResponse preAuthCompleteResponse = preAuthCompleteClient.getPreAuthCompleteResponse(preAuthComplete); 

私は戻り値の型(約推測していますPreAuthCompleteRequestPreAuthCompleteなど)しかし、あなたはアイデアを得る(私は思う:)。上記の呼び出しシーケンスを考えると、次のテストに合格する必要があります、100%のテストカバレッジのための

@Test 
public void badRequestWhenPreAuthCompleteResponseFails() { 
    // preAuthCompleteController.getPreAuthComplete() invokes 
    // preAuthCompleteClient.getPreAuthCompleteResponse() 
    // and any MarshalSendAndReceiveException throw by that client should result in a BAD_REQUEST 
    MarshalSendAndReceiveException expectedException = new MarshalSendAndReceiveException("boom!"); 
    when(preAuthCompleteClient.getPreAuthCompleteResponse(Mockito.any(PreAuthComplete.class))).thenThrow(expectedException); 


    ResponseEntity<SvsTransactionResponseModel> responseEntity = (ResponseEntity<SvsTransactionResponseModel>) preAuthCompleteController 
      .getPreAuthComplete(null, errors); 
    assertTrue(responseEntity.getBody() != null); 
    assertTrue(responseEntity.getStatusCodeValue() == 400); 
} 

@Test 
public void badRequestWhenPreAuthCompleteRequestFails() { 
    // preAuthCompleteController.getPreAuthComplete() invokes 
    // preAuthCompleteClient.getPreAuthCompleteResponse() which then invokes 
    // preAuthCompleteServiceImpl.getPreAuthComplete() which then invokes 
    // preAuthCompleteRequestServiceImpl.getPreAuthCompleteRequest 
    // and any IOException throw by that call should result in a BAD_REQUEST 

    IOException expectedException = new IOException("boom!"); 
    when(preAuthCompleteRequestServiceImpl.getPreAuthCompleteRequest(Mockito.any(PreAuthCompleteModel.class))).thenThrow(expectedException); 

    ResponseEntity<SvsTransactionResponseModel> responseEntity = (ResponseEntity<SvsTransactionResponseModel>) preAuthCompleteController 
      .getPreAuthComplete(null, errors); 
    assertTrue(responseEntity.getBody() != null); 
    assertTrue(responseEntity.getStatusCodeValue() == 400); 
} 
+0

感謝;) – Patrick

関連する問題