嘲笑方法时,Java Mockito InvalidUseOfMatchersException

我在使用嘲笑2.23.4,junit4和springrunner进行测试时遇到困难。即使代码看起来对我来说很好,我仍然会收到InvalidUseOfmatchersException。我不确定我到底缺少什么。任何提示对我都会非常有帮助。我将在下面发布代码。

    @RunWith(SpringRunner.class)
    public class FiscalClosingServiceImplTest {
        @InjectMocks
        private FiscalClosingServiceImpl fiscalClosingServiceImpl;
        @Mock
        private IDataBeanmanager dataBeanmanager;
        @Mock
        private IFiscalClosingPopulator fiscalClosingPopulator;
        @Mock
        private DataBean dataBean;
        @Test
        public void test_getFiscalClosingListByNodeIdAndSiteId_WhenListNotEmpty() throws ServiceException {
            //Arrange
            List<DataBean> dataBeansResult = new ArrayList<DataBean>();
            dataBeansResult.add(dataBean);
            when(dataBeanmanager.listBeansByAttributeValue(anyString(),anyString(),anyString())).thenReturn(dataBeansResult);
            String siteId = "siteId";
            FiscalClosing fiscalClosingTest = new FiscalClosing();
            fiscalClosingTest.setSiteId(siteId); 
 when(fiscalClosingPopulator.convertBeanToFiscalClosing(any(DataBean.class))).thenReturn(fiscalClosingTest);

        //act
        List<FiscalClosing> result = fiscalClosingServiceImpl.getFiscalClosingListByNodeIdAndSiteId(anyString(),eq(siteId));

        //Assert
        assertEquals(result.get(0).getSiteId(),fiscalClosingTest.getSiteId());
    }
}

下面要测试的方法:

@Override
    public List<FiscalClosing> getFiscalClosingListByNodeIdAndSiteId(final String nodeId,final String siteId)
            throws ServiceException {
        log.debug("Retrieving FiscalClosing by transactionLastUpdatedDateTime");
        List<FiscalClosing> fiscalClosingList = new ArrayList<FiscalClosing>();

        List<DataBean> dataBeans = dataBeanmanager.listBeansByAttributeValue(
                EntityConstant.getconstant(CONSTANTS.FISCAL_CLOSING_ID),EntityConstant.getconstant(CONSTANTS.FISCAL_CLOSING_NODE_ID_ID),nodeId,"");

        if(dataBeans.isEmpty()) {
            return fiscalClosingList; 
        }

        for(DataBean dataBean : dataBeans) {
            FiscalClosing fiscalClosing = fiscalClosingPopulator.convertBeanToFiscalClosing(dataBean);
            fiscalClosingList.add(fiscalClosing);
        }

        return fiscalClosingList.stream().filter(item -> item.getSiteId().equals(siteId)).collect(Collectors.toList());
    }
humingming001 回答:嘲笑方法时,Java Mockito InvalidUseOfMatchersException

在测试的“行为”部分中,您正在使用参数匹配器作为被测方法的参数:

List<FiscalClosing> result = fiscalClosingServiceImpl.getFiscalClosingListByNodeIdAndSiteId(anyString(),eq(siteId));

您不能使用这样的匹配器,应使用它们以更通用的方式定义模拟的行为。调用该方法时,您应该传递实际值,尽管根据您模拟方法的其余部分,它们不一定是有效的。

在您的情况下,它可能像这样简单:

List<FiscalClosing> result = fiscalClosingServiceImpl.getFiscalClosingListByNodeIdAndSiteId("nodeId","siteId");

然后,您可能必须更新测试以确保返回正确的站点ID。

本文链接:https://www.f2er.com/3136757.html

大家都在问