【发布时间】:2014-02-12 19:59:30
【问题描述】:
我有这个TestNG测试方法代码:
@InjectMocks
private FilmeService filmeService = new FilmeServiceImpl();
@Mock
private FilmeDAO filmeDao;
@BeforeMethod(alwaysRun=true)
public void injectDao() {
MockitoAnnotations.initMocks(this);
}
//... another tests here
@Test
public void getRandomEnqueteFilmes() {
@SuppressWarnings("unchecked")
List<Filme> listaFilmes = mock(List.class);
when(listaFilmes.get(anyInt())).thenReturn(any(Filme.class));
when(filmeDao.listAll()).thenReturn(listaFilmes);
List<Filme> filmes = filmeService.getRandomEnqueteFilmes();
assertNotNull(filmes, "Lista de filmes retornou vazia");
assertEquals(filmes.size(), 2, "Lista não retornou com 2 filmes");
}
我得到一个“org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 参数匹配器的使用无效! 预期 0 个匹配器,1 个记录:”在此代码中调用 listAll() 方法:
@Override
public List<Filme> getRandomEnqueteFilmes() {
int indice1, indice2 = 0;
List<Filme> filmesExibir = new ArrayList<Filme>();
List<Filme> filmes = dao.listAll();
Random randomGenerator = new Random();
indice1 = randomGenerator.nextInt(5);
do {
indice2 = randomGenerator.nextInt(5);
} while(indice1 == indice2);
filmesExibir.add(filmes.get(indice1));
filmesExibir.add(filmes.get(indice2));
return filmesExibir;
}
我很确定我在这里遗漏了一些东西,但我不知道它是什么!有人帮忙吗?
【问题讨论】:
-
dao.listAll()方法是最终的吗?dao是什么类型?您可能遇到与this question 相同的问题。 -
@andersschuller 不,dao 是被filmeDao 模拟的对象,我已经改进了我的问题以使其更加明显。我已经阅读了您提到的问题,但没有任何内容可以澄清我的问题的答案。