1

インターフェイスオブジェクトのオブジェクトを取得しているという点で、AhandleFaultメソッドのテストケースを作成しようとしています。オブジェクトを取得した後、すべてのプロパティを取得し、作成する必要があります。 Exceptionクラスをカスタマイズし、オブジェクトプロパティをExceptionクラスオブジェクトに設定して、そのメソッドからそのExceptionClassオブジェクトをスローします。soaphandllerSOAPMessageContextSOAPFaultSOAPFault

CVOSSecurityHandllerメソッドである私のソースコード

  public boolean handleFault(SOAPMessageContext context) {
      try {
        Iterator iterator;      
        SOAPFault fault=context.getMessage().getSOAPBody().getFault();
        SoapServiceException serviceException=new SoapServiceException();
    serviceException.setDetail(fault.getDetail());
        serviceException.setFaultActor(fault.getFaultActor());
        iterator=fault.getAllAttributes();
    List<Name> faultAllAttribute=new ArrayList<Name>();
        while(iterator.hasNext()) {
            faultAllAttribute.add((Name)iterator.next());
        }
        serviceException.setFaultAllAttribute(faultAllAttribute);
        serviceException.setFaultCode(fault.getFaultCode());
        serviceException.setFaultCodeName(fault.getFaultCodeAsName());
        serviceException.setFaultCodeQName(fault.getFaultCodeAsQName());
        serviceException.setFaultNode(fault.getFaultNode());
        serviceException.setFaultRole(fault.getFaultRole());
        serviceException.setFaultString(fault.getFaultString());
        iterator=fault.getFaultReasonTexts();
        List<String> faultReasons=new ArrayList<String>();
        while(iterator.hasNext()){
            faultReasons.add((String)iterator.next());
        }
        serviceException.setFaultReasons(faultReasons);
        List<QName> faultSubcode=new ArrayList<QName>();
    while(iterator.hasNext()){
        faultSubcode.add((QName)iterator.next());
        }
    throw serviceException;
    } catch (SOAPException e) {
        e.printStackTrace();
    }
    catch (NullPointerException e) {
    e.printStackTrace();
    }
    return true;
  }

MYCustomizeExceptionクラスをカスタマイズします

public class SoapServiceException extends RuntimeException {
  private Detail detail;
  private String faultActor;
  private String faultCode;
  private Name faultCodeName;
  private QName faultCodeQName;
  private String faultNode;
  private String faultRole;
  private String faultString;
  private List<QName> faultSubcode;
  private List<Name> faultAllAttribute;
  private List<String> faultReasons;

// here is getter and setter of above properties
}

HandleFaultメソッドをテストするためのテストケースファイル

public class CVOSSecurityHandllerTest {
    private CVOSSecurityHandler mockCvosSecurityHandller=mock(CVOSSecurityHandler.class);
    private SOAPMessageContext soapMessageContext=mock(SOAPMessageContext.class);
    private SOAPMessage soapMessage =mock(SOAPMessage.class);
    private SOAPBody soapBody=mock(SOAPBody.class);
    private SOAPFault soapFault=mock(SOAPFault.class);
    @Before
    public void setUp() throws Exception
    {
        Factory.instance = new Factory(new MockServicesModule());
    }

    @After
    public void tearDown() throws Exception
    {
    }
    @Test(expected=SoapServiceException.class)
    public void testHandleFault(){
        try{

        when(soapMessageContext.getMessage()).thenReturn(soapMessage);
            when(soapMessage.getSOAPBody()).thenReturn(soapBody);
            when(soapBody.addFault()).thenReturn(soapFault);
            when(soapFault.getFaultString()).thenReturn("The fault string");
            verify(this.mockCvosSecurityHandller, atLeastOnce()).handleFault(soapMessageContext);
            reset(this.mockCvosSecurityHandller);

        }
        catch(SOAPException e){
            //e.printStackTrace();
        }
        catch(NullPointerException e){
            //throw new SoapServiceException();
        }
        catch(SoapServiceException e){
            e.printStackTrace();
            Assert.assertEquals("The fault",e.getFaultString());
        }


    }
    @BeforeClass
public static void setUpBeforeClass() throws Exception
{
    }

    private class MockServicesModule extends AbstractModule
    {

        @Override
        protected void configure()
        {
            bind(SOAPMessageContext.class).toInstance(CVOSSecurityHandllerTest.this.soapMessageContext);
            bind(SOAPMessage.class).toInstance(CVOSSecurityHandllerTest.this.soapMessage);
            bind(SOAPBody.class).toInstance(CVOSSecurityHandllerTest.this.soapBody);
            bind(SOAPFault.class).toInstance(CVOSSecurityHandllerTest.this.soapFault);
        }
    }


}

だから私がどこで間違いを犯しているのかを助けて、そのための可能な解決策を提供してください。モックオブジェクトを作成しようとしています

CVOSSecurityHandler mockCvosSecurityHandller=mock(CVOSSecurityHandler.class);
private SOAPMessageContext soapMessageContext=mock(SOAPMessageContext.class);
private SOAPMessage soapMessage =mock(SOAPMessage.class);
private SOAPBody soapBody=mock(SOAPBody.class);
private SOAPFault soapFault=mock(SOAPFault.class);

そして、のモックオブジェクトを確認しCVOSSecurityHandllerてメソッドを呼び出しますhandleFaultが、例外をスローしますWantedButNotInvoked

4

1 に答える 1

0

実際のオブジェクト インスタンスはどこにありますか? 私が見るのはモックだけです。テスト対象のシステム (つまり、テスト対象のクラス) は、モックではなく実際のオブジェクトである必要があります。そうしないと、実際のコードが実行されません。

于 2012-07-22T19:37:44.410 に答える