2015-06-03 82 views
0

我有一個web服務類需要單元測試。 這裏是類,這是在測試如何嘲笑Web服務調用,而不通過嘲笑類作爲參數

public class ValidatePaymentMessage { 

public CsmValidationResultX validatePaymentmsg(String csmName, String base64PayloadXML){ 
     //Call Web Service to validate Payment 
    CsmValidationResultX responseMsg=null; 
    PaymentManagerWebService paymentManagerWebService = new PaymentManagerWebService(); 
    PaymentManagerWebServiceImpl serviceAddrs = paymentManagerWebService.getPaymentManagerWebServicePort(); 
    try { 
     responseMsg = serviceAddrs.validatePayment(csmName, base64PayloadXML); 
    } catch (MPMWebServiceException e) { 

     e.printStackTrace(); 
    } 

    return responseMsg; 
    } 
} 

這裏是我的JUnit類

public class ValidatePaymentMessageTest { 

@Test 
public void testValidatePaymentmsg() throws MPMWebServiceException { 

    CsmValidationResultX csmResult= EasyMock.createMock(CsmValidationResultX.class); 

    PaymentManagerWebServiceImpl paymentManagerImpl = EasyMock.createMock(PaymentManagerWebServiceImpl.class); 
    EasyMock.expect(paymentManagerImpl.validatePayment("SEPA","BASE64XML")).andReturn(csmResult).anyTimes(); 

    PaymentManagerWebService paymentManager = EasyMock.createMock(PaymentManagerWebService.class); 
    EasyMock.expect(paymentManager.getPaymentManagerWebServicePort()).andReturn(paymentManagerImpl).anyTimes(); 

    ValidatePaymentMessage validatePayment=new ValidatePaymentMessage(); 
    CsmValidationResultX response = validatePayment.validatePaymentmsg("SEPA", "base64PayloadXML"); 
    System.out.println(response.getCsmValidationResult().isValid()); 
} 

} 

當我運行這個Junit的是調用,而不是嘲笑實際的Web服務one's.So請讓我知道如何我解決了這個問題。

回答

1

你仍然在validatePaymentmsg()中實例化一個真正的PaymentManagerWebService,所以這些模擬不起作用。你不能用EasyMock模擬局部變量的構造,但你可以使用PowerMock。因此,如果更改要接收的代碼和PaymentManagerWebService的實例不是一個選項,則需要mock its construction with PowerMock

@RunWith(PowerMockRunner.class) 
@PrepareForTest(ValidatePaymentMessage.class) 
public class ValidatePaymentMessageTest { 

    @Test 
    public void testValidatePaymentmsg() throws MPMWebServiceException { 

     // ..... 
     PowerMock.expectNew(PaymentManagerWebService.class).andReturn(paymentManager); 
     //.... 
    } 
} 
+0

非常感謝,它幫助了我。 – user3309975