2011-08-25 55 views
7

Es posible un simulacro de modo que después de su uso en el ciclo, p.Java mockito mock set

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

Thanks.

+0

Erm ... ¿Qué estás diciendo? – berry120

+0

Pregunta si hay una forma de simular el comportamiento de un conjunto en un ciclo for. – Nicolas

Respuesta

10

Hay un par de opciones:

  1. Échala
  2. Uso @Mock anotación

Ejemplos:

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

O bien,

@Mock 
private Set<String> mySet; 

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

Si bien la respuesta de Nicholas es perfectamente clara al explicar cómo se burla de un conjunto, creo que su pregunta también implica que desea simular el comportamiento del conjunto durante el ciclo.

Para lograr que primero tiene que saber que su código es sólo el azúcar sintáctica y se expande a:

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

(Para más detalles acerca de que ver la cuestión Stackoverflow Which is more efficient, a for-each loop, or an iterator?)

Esto deja claro que se necesita burlarse del método iterator(). Después de configurar el simulacro como lo describe nicholas, se burla del método del iterador como este:

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