2013-04-04 2 views
6

У меня есть код, который выглядит так:Как высмеять возвращаемое значение карты?

for (Map.Entry<Integer, Action> entry : availableActions.entrySet()) { 
    ... 
} 

Я пытался дразнить его, как это:

Map mockAvailableActions = mock(Map.class, Mockito.RETURNS_DEEP_STUBS); 
mockAvailableActions.put(new Integer(1), mockAction); 

Я думаю, что было бы достаточно. Но entrySet пуст. Поэтому я добавил следующее:

when(mockAvailableActions.entrySet().iterator()).thenReturn(mockIterator); 
when(mockIterator.next()).thenReturn(mockAction); 

Still entrySet пуст. Что я делаю не так? Спасибо за любой вклад!

ответ

11

Может быть, я что-то не хватает, но почему бы не сделать это:

Map.Entry<Integer, Action> entrySet = <whatever you want it to return> 
Map mockAvailableActions = mock(Map.class); 
when(mockAvailableActions.entrySet()).thenReturn(entrySet); 

Кроме того, рассмотреть ли вы на самом деле нужно макет карты на все, что не настоящая сделать работу? Mocks обычно используются для замены других частей вашего кода, которые вы не хотите участвовать в вашем модульном тесте, карта является частью основного языка Java и обычно не издевается.

+0

Да, это была моя первая мысль. Но что будет выглядеть «Map.Entry entrySet ="? Запись не может быть создана, поэтому я бы определил переменную? – user1660256

+0

http://stackoverflow.com/questions/3110547/java-how-to-create-new-entry-key-value –

+1

Вы были правы Codebox - этот ответ был вовсе не издеваться над Картой. – user1660256

Смежные вопросы