[英]How to Mock an object that is not set to a variable
我目前正在為遺留代碼編寫單元測試。 我需要在該對象的函數調用上為“ doReturn”模擬一個對象。 但是,該對象在被調用的同一行上實例化,並且從未分配給變量。 有沒有一種方法可以模擬此返回值而不接觸原始代碼?
包含函數調用的舊代碼行,需要返回一個模擬列表:
List<Map<String, String>> referenceDataList = new ReferenceDataInquiryMapper().execute(referenceDataInquiry);
我嘗試模擬此“執行”調用:
List<Map<String, String>> referenceDataList = new ArrayList<Map<String, String>>();
//Add data to referenceDataList
ReferenceDataInquiryMapper referenceDataInquiryMapper = PowerMockito.mock(ReferenceDataInquiryMapper.class);
PowerMockito.doReturn(referenceDataList).when(referenceDataInquiryMapper,"execute",Mockito.any());
我也嘗試過:
PowerMockito.doReturn(referenceDataList).when(new ReferenceDataInquiryMapper(),"execute",Mockito.any());
引發PowerMockito錯誤
以及:
PowerMockito.doReturn(referenceDataList).when(PowerMockito.mock(ReferenceDataInquiryMapper.class),"execute",Mockito.any());
這引發了與我的第一次嘗試相同的異常。
在運行測試並引發異常時,上面發布的第一行嘗試返回一個Mock值,而不是返回Mock值。 實際上可以模擬該代碼嗎?
〜謝謝
創建新對象時,我們需要返回其模擬。 如下所示添加whenNew。
List<Map<String, String>> referenceDataList = new ArrayList<Map<String, String>>();
//Add data to referenceDataList
ReferenceDataInquiryMapper referenceDataInquiryMapper =
PowerMockito.mock(ReferenceDataInquiryMapper.class);
PowerMockito.whenNew(ReferenceDataInquiryMapper.class).thenReturn( referenceDataInquiryMapper);
PowerMockito.doReturn(referenceDataList).when( referenceDataInquiryMapper,"execute",Mockito.any());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.