2013-04-04 14 views
6

Mam kodu, który wygląda tak:Jak sfałszować wartość zwracaną mapy?

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

Próbowałem wyśmiewać to tak:

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

Myślę, że to wystarczy. Ale entrySet jest pusty. Więc dodałem to:

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

Jeszcze wpis Ustaw jest pusty. Co ja robię źle? Dzięki za wszelkie dane wejściowe!

Odpowiedz

11

Może ja czegoś brakuje, ale dlaczego nie po prostu to zrobić:

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

także rozważyć, czy rzeczywiście trzeba mock Mapa w ogóle, to nie prawdziwy wykonać zadanie? Mocks są zazwyczaj używane do zastąpienia innych fragmentów kodu, których nie chcesz brać udziału w teście jednostek, mapa jest częścią podstawowego języka Java i zwykle nie jest wyśmiewana.

+0

Tak, to była moja pierwsza myśl. Ale co by wyglądało "Map.Entry entrySet ="? Nie można utworzyć instancji wpisu, więc chciałbym zdefiniować zmienną? – user1660256

+0

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

+1

Miałeś rację Codebox - ta odpowiedź nie miała w ogóle naśmiewać mapy. – user1660256

Powiązane problemy