Как проверить, правильно ли обрабатывается ошибка SOAP?

Я использую JUnit и Mockito для проверки того, что мой веб-сервис 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);
}
}

1 ответ

Я предлагаю вам использовать макет с полным стеком (т.е. создать конечную точку в локальном сокете, указать клиенту там). Тогда создайте ошибку мыла и позвольте макету выбросить соответствующее исключение по проводу. Если вы используете CXF, я создал простое правило JUnit, которое делает это, см. Тестовый метод SoapServiceRuleTest.processSoapCallWithException ().

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

Другие вопросы по тегам