[英]Mockito : argument type mismatch?
我失敗了: processStandaloneCancelAuthRequest(00, "true")
java.lang.IllegalArgumentException:
參數類型不匹配....錯誤。 我正在使用Mockito進行單元測試,並將00
作為示例輸入傳遞,並且true是示例輸出。
@BeforeMethod
public void beforeMethod(){
super.beforeMethod();
authProcessor = new MastercardCancelAuthProcessor();
authProcessor.setPaymentRqIsoAuthRqTransformer(paymentRqIsoAuthRqTransformer);
authProcessor.setIsoAuthRsPaymentRsTransformer(isoAuthRsPaymentRsTransformer);
authProcessor.setAuthDatabaseUpdater(authDatabaseUpdater);
authProcessor.setSsgIsoService(ssgIsoService);
authProcessor.setRemarkGeneratorSelector(remarkGeneratorSelector);
authProcessor.setIsoMessageTransformer(isoMessageTransformer);
authProcessor.setOutMasker(outMasker);
authProcessor.setInMasker(inMasker);
List<Validator<PaymentRQ>> validators = new ArrayList<Validator<PaymentRQ>> ();
validators.add(validator);
authProcessor.setValidators(validators);
requestInfo = new RequestInfo();
requestInfo.setTransactionId(TRANS_ID);
authProcessor.setRequestInfo(requestInfo);
// authProcessor.setUpdateAuthDatabase(true);
paymentRq = new MockPaymentRQFactory().createDefaultPaymentRQ();
Action action = new Action();
action.setType(SubAction.VOID.getValue());
action.setValue(PaymentConstant.CANCEL_AUTH_ACTION);
paymentRq.setAction(action);
}
@DataProvider
public Object[][] createDataProviderForTestingVariousApprovalCodes(){
return new Object[][]{
{ "00", "true"},
{"08", "true"},
};
}
@Test(dataProvider = "createDataProviderForTestingVariousApprovalCodes")
public void processStandaloneCancelAuthRequest(PaymentRQ paymentRq, String transactionId) throws PymtApplicationException {
MastercardCancelIsoMessageRequestHolder req = mock(MastercardCancelIsoMessageRequestHolder.class);
requestInfo.setRequestObject(paymentRq);
when(paymentRqIsoAuthRqTransformer.transform()).thenReturn(req);
SSGDataObject routingInfo = new SSGDataObject();
when(routingInfoCreator.createRoutingInfo(paymentRq.getAction().getValue(),paymentRq.getMerchantDetail().getMerchantID())).thenReturn(routingInfo);
MastercardCancelIsoMessageResponseHolder resp = mock(MastercardCancelIsoMessageResponseHolder.class);
when(ssgIsoService.send(eq(req), eq(isoMessageTransformer), any(PciDataMasker.class), any(PciDataMasker.class), eq(routingInfo))).thenReturn(resp);
PaymentRS paymentRs = createDummyPaymentRS(paymentRq);
when(isoAuthRsPaymentRsTransformer.transformIsoAuthRsToPaymentRs(paymentRq, req, resp)).thenReturn(paymentRs);
when(remarkGeneratorSelector.select(paymentRq)).thenReturn(remarkGenerator);
String remark1 = "REMARK1";
List<String> authRemarks = Arrays.asList(remark1);
when(remarkGenerator.generateRemarks(RemarkType.CANCEL_AUTH, paymentRq, paymentRs)).thenReturn(authRemarks);
PaymentRS actualPaymentRs = authProcessor.processRequest( paymentRq, TRANS_ID);
assertEquals(actualPaymentRs, paymentRs);
verify(validator).validate(paymentRq);
verify(routingInfoCreator).createRoutingInfo(paymentRq.getAction().getValue(),paymentRq.getMerchantDetail().getMerchantID());
verify(paymentRqIsoAuthRqTransformer).transform();
verify(paymentRqIsoAuthRqTransformer).init();
verify(ssgIsoService).send(eq(req), eq(isoMessageTransformer), eq(outMasker), eq(inMasker), eq(routingInfo));
verify(isoAuthRsPaymentRsTransformer).transformIsoAuthRsToPaymentRs(paymentRq, req, resp);
// verify(authDatabaseUpdater).updateAuthRecords(TRANS_ID, paymentRq, req, resp,paymentRs);
verify(remarkGeneratorSelector).select(paymentRq);
verify(remarkGenerator).generateRemarks(RemarkType.CANCEL_AUTH,paymentRq, paymentRs);
}
private PaymentRS createDummyPaymentRS(PaymentRQ paymentRq2) {
// TODO Auto-generated method stub
return null;
}
我認為您的問題不是由Mockito引起的。
此測試方法:
public void processStandaloneCancelAuthRequest(PaymentRQ paymentRq, String transactionId)
需要PaymentRQ
對象和String
。 但是,您在DataProvider
返回2 String
:
@DataProvider
public Object[][] createDataProviderForTestingVariousApprovalCodes(){
return new Object[][]{
{ "00", "true"},
{"08", "true"},
};
}
您應該在DataProvider
返回PaymentRQ
對象。
因此,假設PaymentRQ
在其構造函數PaymentRQ
String作為參數,則可以執行以下操作:
@DataProvider
public Object[][] createDataProviderForTestingVariousApprovalCodes(){
return new Object[][]{
{ new PaymentRQ("00"), "true"},
{ new PaymentRQ("08"), "true"},
};
}
數據提供程序沒有正確的值。 它期望一個PaymentRQ對象和一個字符串對象。 如果需要對PaymentRQ對象創建一個模擬,並在dataprovider中使用它。
@DataProvider
public Object[][] createDataProviderForTestingVariousApprovalCodes(){
return new Object[][]{
{ <mock object here>, "true"},
{ <mock object here>, "true"},
};
}
同樣,在創建模擬對象時,設置可以在模擬對象上調用的所有方法的返回值。
when(mock.methodName).thenReturn("00");
等等
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.