2016-10-27 5 views
-2

Мой класс содержит следующий метод handleException, для которого я должен написать JUnit с полным охватом кода. Как я новичок в JUnit кто-нибудь может помочьКак написать Junit для исключения

public void handleException(Exception exception, DCMRequestDTO requestDTO, DCMResponseDTO responseDTO, String callType) { 
    logger.error("Exception occured for deviceId:" + requestDTO.getDeviceID() + ",RefNum:"+ 
      requestDTO.getRefNum() + ",Operation:" + requestDTO.getOperation() + "::" + exception.getMessage()); 
    exception.printStackTrace(); 
    String errorMessageKey = "GENERIC_EXCEPTION"; 
    if (exception instanceof TooManyInflightException) { 
     errorMessageKey = "THROTTLE_EXCEPTION"; 
    } else if (exception.getCause() instanceof SocketTimeoutException || 
      (exception.getCause() != null && exception.getCause().getCause() instanceof SocketTimeoutException)) { 
     errorMessageKey = "TIMEOUT_EXCEPTION"; 
    } else if (exception.getCause().getCause() instanceof ConnectException || exception.getCause().getCause() instanceof ConnectTimeoutException || exception.getCause().getCause() instanceof UnknownHostException || exception.getCause().getCause() instanceof MalformedURLException || exception.getCause().getCause() instanceof SocketException || (exception.getMessage().indexOf("404 Error") != -1)) { 
     errorMessageKey = "CONNECTION_EXCEPTION"; 
    } else if(exception.getMessage().indexOf("500")!=-1){ 
     errorMessageKey = "INTERNAL_ERROR"; 
    } 
    /* 
    * else if (exception instanceof DCMException) { if (exception.getCause().getCause() instanceof SocketTimeoutException) { errorMessageKey = "TIMEOUT_EXCEPTION"; } else if (exception.getCause().getCause() instanceof ConnectException || exception.getCause().getCause() instanceof IOException || exception.getCause().getCause() instanceof SocketException || (exception.getMessage().indexOf("404 Error") != -1)) { errorMessageKey = "CONNECTION_EXCEPTION"; } } 
    */ 
    // logger.error(errorMessageKey + " occured in DCMServiceImpl :: UniqueId = " + requestDTO.getUniqueId() + ", RefNum = " + requestDTO.getRefNum() + ", Operation = " + requestDTO.getOperation() + ", callType = " + callType, exception); 
    // added for reset time while exception occured 
    responseDTO.setErrorCode(0); 
    responseDTO.setErrorString(smartGraphUtils.getProperty(errorMessageKey)); 
    responseDTO.setStackTrace(exception.toString()); 
    responseDTO.setHasJson(false); 
    requestDTO.setHidResolveGetRetrains("Undetermined"); 
} 

ответ

1

Согласно исходному коду вам нужен экземпляр окружающего класса внутри тестов: то вы должны быть в состоянии вызвать метод handleException. Каждый тест должен состоять (в лучшем случае) только из одного утверждения. Это позволяет легко понять, что вы сейчас проверяете. Вот пример:

public final class MessageBusTest { 
    @Test(expected = NullPointerException.class) 
    public void registerWithNullThrowsNullPointerException() { 
     MessageBus.INSTANCE.register(null); 
    } 
} 

аннотаций @Test помогает JUnit, чтобы выяснить, какие методы в классе тесты. В моем примере я вызываю метод с null и ожидаю, что будет выбрано исключение, следовательно, expected = NullPointerException.class.

В вашем случае вам необходимо, например, подготовьте правильное значение Exception для проверки, а затем проверьте requestDTO на содержимое, то есть строку ошибки, с номером assertEquals.

0

Прежде всего, ваш метод имеет много потоков, и вам нужно написать тесты для каждого потока/состояния внутри вашего метода, чтобы обеспечить выполнение всех сценариев.

Пример кода была представлена ​​ниже, чтобы начать с, и вы можете написать полную логику:

import org.junit.Test; 

    public class HandleExceptionText { 

     @Test 
     public void testHandleExceptionForTooManyInflightException() { 
      //throw TooManyInflightException exception and then call handleException() 
      //Example using Mockito: when(obj.method(parms)).thenThrow(new TooManyInflightException()); 
      //Assert to check responseDTO values have been set 
     } 

     @Test 
     public void testHandleExceptionForSocketTimeoutException() { 
      //throw SocketTimeoutException exception and then call handleException() 
      //Example using Mockito: when(obj.method(parms)).thenThrow(new SocketTimeoutException()); 
      //Assert to check responseDTO values have been set 
     } 

     @Test 
     public void testHandleExceptionForConnectTimeoutException() { 
      //throw ConnectTimeoutException exception and then call handleException() 
      //Example using Mockito: when(obj.method(parms)).thenThrow(new ConnectTimeoutException()); 
      //Assert to check responseDTO values have been set 
     } 

     @Test 
     public void testHandleExceptionForConnectException() { 
      //throw ConnectException exception and then call handleException() 
      //Example using Mockito: when(obj.method(parms)).thenThrow(new ConnectException()); 
      //Assert to check responseDTO values have been set 
     } 

     @Test 
     public void testHandleExceptionForUnknownHostException() { 
      //throw UnknownHostException exception and then call handleException() 
      //Example using Mockito: when(obj.method(parms)).thenThrow(new UnknownHostException()); 
      //Assert to check responseDTO values have been set 
     } 

     @Test 
     public void testHandleExceptionForMalformedURLException() { 
      //throw MalformedURLException exception and then call handleException() 
      //Example using Mockito: when(obj.method(parms)).thenThrow(new MalformedURLException()); 
      //Assert to check responseDTO values have been set 
     } 

     @Test 
     public void testHandleExceptionForConnectException() { 
      //throw SocketException exception and then call handleException() 
      //Example using Mockito: when(obj.method(parms)).thenThrow(new SocketException()); 
      //Assert to check responseDTO values have been set 
     } 

    } 

Кроме того, я предлагаю идти через ниже JUnit & Mockito учебник ссылки: https://dzone.com/articles/junit-tutorial-beginners https://www.tutorialspoint.com/mockito/mockito_exception_handling.htm

+0

@ Test \t public final void testhandleException() throws Exception {given (smartGraphServiceHelper.generateDocument (Mockito.any (DCMRequestDTO.class))). WillThrow (новый SocketTimeoutException()); \t \t \t Строка callType = ""; \t \t \t \t smartGraphService.handleException (исключение, запросDTO, responseDTO, callType); \t \t assertEquals ("0", responseDTO.getErrorCode()); \t} это то, что я пробовал, но дает nullpointer, когда он входит в exception.getCause() – Amit

Смежные вопросы