2016-03-23 19 views
1

SOAP web hizmetimin SOAP hatalarını zarif bir şekilde işleme alıp almadığını ve örneğin istenmeyen özel durumlar oluşturup oluşturmadığını test etmek için JUnit ve Mockito kullanıyorum.SOAP hatasının hassas bir şekilde ele alınıp uygulanmadığı nasıl kontrol edilir?

Şimdiye kadar, aşağıdaki koddan da görebileceğiniz gibi, sadece SOAPFaultException'un atılıp atılmadığını test ediyorum (tabii ki, atıyordum). SOAP hatasını alırken başka herhangi bir özel durumun oluşup oluşmayacağını nasıl kontrol edebildiğimi merak ediyorum.

Ayrıca bir istisna atmadan bir SOAP hatası ile alay etmenin bir yolu var mı (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); 
} 
} 

cevap

0

Sana tam yığın taklidinin ile gitmek önermek (yani yerel bir soket üzerinde bir Endpoint yumurtlamaya orada müşteri işaret). Sonra bir sabun hatası oluşturun ve alayın tel üzerinden bir appropriate exception atmasına izin verin. CXF kullanıyorsanız, bunu yapan bir simple JUnit Rule oluşturdum, test metoduna bakın SoapServiceRuleTest.processSoapCallWithException().

Genel bir strateji olarak, her test yöntemiyle alay üzerinde sıfırlama yaparak ve o zaman buna ek olarak (..) ekleyerek, bir seferde bir aramayı sabote eden soyut 'mutlu bir vaka' birim testi yapmanızı öneririm.