2011-08-25 16 views
7

È possibile impostare la simulazione in modo che dopo l'uso nel ciclo, ad es.Java mockito mock set

for(String key: mySet) { ...} 

Grazie.

+0

Erm ... Che stai dicendo ?! – berry120

+0

Chiede se c'è un modo per deridere il comportamento di un set in un ciclo for. – Nicolas

risposta

10

C'è un paio di opzioni:

  1. lanciarlo
  2. Usa @Mock annotazione

Esempi:

Set<String> mySet = (Set<String>) mock(Set.class); 

--ovvero--

@Mock 
private Set<String> mySet; 

@Before 
public void doBefore() throws Exception { 
    MockitoAnnotations.initMocks(this.getClass()); //this should create mocks for your objects... 
} 
5

Mentre nella risposta di nicholas è perfettamente chiaro spiegare come si prende in giro un Set, penso che la tua domanda implichi anche che si voglia prendere in giro il comportamento del set durante il loop.

per raggiungere questo è necessario prima sapere che il codice è solo zucchero sintattico e si espande a:

for (Iterator iterator = mySet.iterator(); iterator.hasNext();) { 
    String key = (String) iterator.next(); 
    ... 
} 

(Per i dettagli sulla che vedere la domanda StackOverflow Which is more efficient, a for-each loop, or an iterator?)

Ciò rende chiaro che si bisogno di prendere in giro il metodo iterator(). Dopo aver impostato la simulazione come descritto da Nikolas, prendi in giro il metodo iteratore in questo modo:

when(mySet.iterator()).thenAnswer(new Answer<Iterator<String>>() { 
    @Override 
    public Iterator<String> answer(InvocationOnMock invocation) throws Throwable { 
     return Arrays.asList("A", "B").iterator(); 
    } 
});