如何根据收到的参数进行模拟?

时间:2015-05-26 18:24:38

标签: java unit-testing mockito

根据方法接收的参数,希望返回不同的东西。
如何使用Mockito?

例如,根据" Planilha" 的ID,我希望获得不同的回报,但不知道如何实现这种平等。

我的测试

@Test(expected = InternalServerErrorException.class)
    public void testReadMetadados_invalidPlanilha_invalidFormat() throws Exception {
        oknok.validacao.entities.Planilha actual = new Planilha().setPath(URL_TEST.concat("click/T001.json"))
                                                                .setId("invalidFormat");
        planilhaReader.readMetadados(actual);
    }

我的模拟

@Bean
        UploadDAO getUploadDAO() {
            UploadDAO dao = Mockito.mock(UploadDAO.class);
            File myFile = new File(URL_TEST, "click/T001.json");
            Planilha planilha = new Planilha().setId("invalidFormat").setPath(URL_TEST.concat("click/T001.json"));
            when(dao.getPlanilha(Matchers.eq(planilha))).thenReturn(myFile);
            return dao;
        }

2 个答案:

答案 0 :(得分:2)

您的代码似乎是正确的,但您应确保Planilha类正确实现equals方法。此方法应比较相等所需的所有属性。

答案 1 :(得分:0)

首先我会先用Mockito.any测试它,如果可行的话。

when(dao.getPlanilha(Mockito.any(Planilha.class))).thenReturn(myFile);

如果这样可行,则Planilha中的equals方法不会按照您期望的方式实现。

此外,您的@Test方法期望抛出异常(expected = InternalServerErrorException.class),但您的mock不会抛出异常。只需确保您的代码将抛出该特定异常,这就是您要测试的内容。