2016-03-23 3 views
1

Я использую JUnit и Mockito, чтобы проверить, обрабатывает ли мой веб-сервис SOAP ошибки SOAP изящно и не вызывает никаких нежелательных исключений, например.Как проверить, обрабатывается ли ошибка SOAP изящно?

Так что до сих пор, как вы можете видеть из приведенного ниже кода, я тестирую только, выбрасывается ли SOAPFaultException (конечно, я его бросил). Интересно, как я мог проверить, будет ли любое другое исключение выбрано при получении ошибки SOAP.

Также есть способ издеваться над ошибкой SOAP, не вызывая исключения (SOAPFaultException)?

public class SOAPFaultsTest { 

private MyObj myObj = (MyObj) mock(IMockClass.class); 

@Before 
public void create() { 

    SOAPFault soapFault = null; 
    try { 
     soapFault = SOAPFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL).createFault(); 
     soapFault.setFaultString("unable to create new native thread"); 
     soapFault.setFaultCode(QName.valueOf("soap:Server")); 
    } catch (SOAPException e) { 
     e.printStackTrace(); 
    } 

    // Define behaviour of myObj mock object 
    when(myObj.randomMethod(any(RandomClass.class))).thenThrow(new SOAPFaultException(soapFault)); 
} 

// Here I'm testing whether invoking myObj's randomMethod with a RandomClass object as an argument throws a SOAPFaultException. 
// It does because this is how I defined its behaviour. 
// What I really want to test is whether receiving a SOAP fault at any time is going to cause any trouble. 
@Test(expected=SOAPFaultException.class) 
public void testSOAPException() throws SOAPFaultException { 
    RandomClass rc = new RandomClass(); 
    myObj.randomMethod(rc); 
} 
} 

ответ

0

Я предлагаю вам идти с полным стеком издеваться (т.е. нерест конечная точка на локальный сокет, указать клиента там). Затем создайте потерю мыла и дайте ложно пропустить appropriate exception по проводу. Если вы используете CXF, я создал simple JUnit Rule, который делает это, см. Метод теста SoapServiceRuleTest.processSoapCallWithException().

В качестве общей стратегии я предлагаю вам сделать единичный тест «счастливого случая», который вы затем саботируете по одному вызову за раз, выполняя сброс на макет с каждым методом тестирования и добавляя thenThrow (..) соответственно.