2016-03-23 26 views
1

私は、SOAP WebサービスがSOAP障害を正常に処理するかどうかをテストするために、JUnitとMockitoを使用しています。たとえば、不要な例外は発生しません。SOAP障害が正常に処理されているかどうかを確認する方法?

これまでのところ、下のコードからわかるように、私はSOAPFaultExceptionがスローされているかどうかをテストしています(もちろん、私はそれを投げました)。私は、SOAPフォールトを受け取ったときに他の例外がスローされるかどうかをどうやって調べることができるのだろうかと思います。

また、例外(SOAPFaultException)をスローせずにSOAP障害を模擬する方法はありますか?

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()を参照してください。

一般的な戦略として、抽象的な「ハッピーケース」単体テストを行い、各テストメソッドでモックをリセットし、それに応じてTrow(..)を追加することで、一度に1つのコールを妨害することをお勧めします。

関連する問題