Diferencia entre revisiones de «Mockito»

De Dos Ideas.
Saltar a: navegación, buscar
(Agregado BDDMockito)
m (BDDMockito)
Línea 34: Línea 34:
 
  import static org.mockito.BDDMockito.*;
 
  import static org.mockito.BDDMockito.*;
 
   
 
   
  Seller seller = mock(Seller.class);
+
  Vendedor vendedor = mock(Vendedor.class);
  Shop shop = new Shop(seller);
+
  Negocio negocio = new Negocio(vendedor);
 
   
 
   
  public void shouldBuyBread() throws Exception {
+
@Test
 +
  public void comprarPan() throws Exception {
 
   //given   
 
   //given   
   given(seller.askForBread()).willReturn(new Bread());
+
   given(vendedor.buscarPan()).willReturn(new Pan());
 
    
 
    
 
   //when
 
   //when
   Goods goods = shop.buyBread();
+
   Compra compra = negocio.comprarPan();
 
    
 
    
 
   //then
 
   //then
   assertThat(goods, containBread());
+
   assertThat(compra, contienePan());
 
  }  
 
  }  
 
</code>
 
</code>
Línea 51: Línea 52:
 
Stubbing con void y excepciones:
 
Stubbing con void y excepciones:
 
<code java5>
 
<code java5>
 
 
   //given
 
   //given
 
   willThrow(new RuntimeException("boo")).given(mock).foo();
 
   willThrow(new RuntimeException("boo")).given(mock).foo();
 
    
 
    
 
   //when
 
   //when
   Result result = systemUnderTest.perform();
+
   Result result = sistemaBajoPrueba.ejecutar();
 
    
 
    
 
   //then
 
   //then
   assertEquals(failure, result);
+
   assertEquals(failure, result);  
 
 
</code>
 
</code>
  

Revisión del 11:55 8 mar 2010

Mockito es una librería Java para la creación de Mock Object muy usados para el testeo unitario en Test Driven Development, basado en EasyMock.

Mockito fue creado con el objetivo de simplificar y solucionar algunos de los temas antes mencionados. EasyMock y Mockito puede hacer exactamente las mismas cosas, pero Mockito tiene un API más natural y práctico de usar.

Características principales

  1. Se pueden crear mocks de interfaces y clases concretas.
  2. Verificación de invocaciones (cantidad exacta, al menos una vez, órden de invocación, etc.)
  3. El stack trace se mantiene limpio, ya que los errores ocurren en los assert que se hagan (y no dentro del método bajo prueba, como en EasyMock).
  4. Un API más clara para crear stubs y verificaciones

Ejemplo de uso

import static org.mockito.Mockito.*; ..... //creamos el mock y el stub ArrayList instance = mock(ArrayList.class); doReturn("hola mundo").when(instance).get(0);

//ejecutamos la lógica a probar instance.get(0);

//verificamos que se hayan invocado los métodos verify(instance).get(0);

BDDMockito

BDDMokcito es una clase alternativa que ofrece Mockito para crear pruebas al estilo Behaviour Driven Development (BDD) (es decir, con bloques dado / cuando / entonces).

El problema es que el API de Mockito usa la palabra "when" y no se integra bien con los comentarios //given //when //then (según BDD, el stubbing forma parte del área //given, y no del //when).

BDDMockito agrega una clase que tiene alias para los métodos de stub, usando given(Object).

import static org.mockito.BDDMockito.*;

Vendedor vendedor = mock(Vendedor.class);
Negocio negocio = new Negocio(vendedor);

@Test
public void comprarPan() throws Exception {
  //given  
  given(vendedor.buscarPan()).willReturn(new Pan());
  
  //when
  Compra compra = negocio.comprarPan();
  
  //then
  assertThat(compra, contienePan());
} 

Stubbing con void y excepciones:

  //given
  willThrow(new RuntimeException("boo")).given(mock).foo();
  
  //when
  Result result = sistemaBajoPrueba.ejecutar();
  
  //then
  assertEquals(failure, result); 

Ver también