2016-10-27 8 views
-2

Meine Klasse enthält folgende HandleException-Methode, für die ich JUnit mit voller Codeabdeckung schreiben muss. Als ich JUnit bin hier kann nach Ihren Quellcode müssen in den Tests eine Instanz der umgebenden Klasse, die Sie jemandWie schreibe ich Junit für Ausnahme

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

Antwort

1

helfen: dann sollten Sie in der Lage sein handleException die Methode aufzurufen. Jeder Test sollte (im besten Fall) aus nur einer Assert bestehen. Dies macht es leicht zu verstehen, was Sie gerade überprüfen. Hier ist ein Beispiel:

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

Die Anmerkung @Test JUnit hilft, herauszufinden, welche Methoden in einer Klasse sind Tests. In meinem Beispiel rufe ich eine Methode mit null auf und erwarte, dass eine Ausnahme ausgelöst wird, daher die expected = NullPointerException.class.

In Ihrem Fall müssen Sie z. Bereiten Sie den richtigen Exception für einen Test vor und überprüfen Sie dann den requestDTO für den Inhalt, d. h. die Fehlerzeichenfolge, mit einem assertEquals.

0

Zunächst hat Ihre Methode viele Flüsse und Sie müssen Tests für jeden Fluss/Bedingung innerhalb Ihrer Methode schreiben, um sicherzustellen, dass alle Szenarien behandelt werden.

Beispielcode wurde unten angegeben, mit zu beginnen, und Sie können die komplette Logik schreiben:

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 
     } 

    } 

Auch ich schlage vor, gehen durch die unten JUnit & Mockito Tutorial Links: https://dzone.com/articles/junit-tutorial-beginners https://www.tutorialspoint.com/mockito/mockito_exception_handling.htm

+0

@ Test \t public final void testhandleException() löst Exception aus {given (smartGraphServiceHelper.generateDocument (Mockito.any (DCMRequestDTO.class))). WillThrow (new SocketTimeoutException()); \t \t \t \t Zeichenfolge callType = ""; \t \t \t \t smartGraphService.handleException (Ausnahme, requestDTO, responseDTO, callType); \t \t assertEquals ("0", responseDTO.getErrorCode()); \t} Dies ist, was ich versucht habe, gibt aber nullpointer, wenn es innerhalb der exception.getCause() geht – Amit

Verwandte Themen