簡體   English   中英

Mockito:參數類型不匹配?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM