Java Mockito InvalidUseOfMatchersException при использовании метода насмешки - PullRequest
0 голосов
/ 08 ноября 2019

У меня трудности с тестированием методов с mockito 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(), 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());
    }

1 Ответ

1 голос
/ 08 ноября 2019

В части "Act" вашего теста вы используете сопоставители аргументов в качестве параметров тестируемого метода:

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

Вы не можете использовать подобные сопоставления, их следует использовать для определенияповедение макета в более общем смысле. При вызове метода вы должны передавать фактические значения, хотя они не обязательно должны быть действительными, в зависимости от того, как вы издеваетесь над остальной частью метода.

В вашем случае это может быть так просто:

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

Тогда вам, возможно, придется обновить свой тест, чтобы обеспечить возвращение правильного идентификатора сайта.

...