Diferencia entre revisiones de «Mockito»
(→Ver también) |
(Agregado BDDMockito) |
||
Línea 22: | Línea 22: | ||
//verificamos que se hayan invocado los métodos | //verificamos que se hayan invocado los métodos | ||
verify(instance).get(0); | verify(instance).get(0); | ||
+ | </code> | ||
+ | |||
+ | == 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). | ||
+ | |||
+ | <code java5> | ||
+ | import static org.mockito.BDDMockito.*; | ||
+ | |||
+ | Seller seller = mock(Seller.class); | ||
+ | Shop shop = new Shop(seller); | ||
+ | |||
+ | public void shouldBuyBread() throws Exception { | ||
+ | //given | ||
+ | given(seller.askForBread()).willReturn(new Bread()); | ||
+ | |||
+ | //when | ||
+ | Goods goods = shop.buyBread(); | ||
+ | |||
+ | //then | ||
+ | assertThat(goods, containBread()); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Stubbing con void y excepciones: | ||
+ | <code java5> | ||
+ | |||
+ | //given | ||
+ | willThrow(new RuntimeException("boo")).given(mock).foo(); | ||
+ | |||
+ | //when | ||
+ | Result result = systemUnderTest.perform(); | ||
+ | |||
+ | //then | ||
+ | assertEquals(failure, result); | ||
+ | |||
</code> | </code> | ||
Línea 30: | Línea 69: | ||
* [http://www.dosideas.com/descargas/category/3-testing.html?download=11%3Ademo-de-mockito Proyecto de ejemplos con Mockito] | * [http://www.dosideas.com/descargas/category/3-testing.html?download=11%3Ademo-de-mockito Proyecto de ejemplos con Mockito] | ||
* [http://www.dosideas.com/java/242-mockito-o-basta-de-easymock.html Introducción a Mockito] | * [http://www.dosideas.com/java/242-mockito-o-basta-de-easymock.html Introducción a Mockito] | ||
+ | * [http://mockito.googlecode.com/svn/branches/1.8.0/javadoc/org/mockito/BDDMockito.html Javadoc de BDDMockito] | ||
[[Category:TDD]] | [[Category:TDD]] | ||
+ | [[Category:BDD]] | ||
+ | [[Category:JUnit]] |
Revisión del 11:52 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
- Se pueden crear mocks de interfaces y clases concretas.
- Verificación de invocaciones (cantidad exacta, al menos una vez, órden de invocación, etc.)
- 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).
- 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.*; Seller seller = mock(Seller.class); Shop shop = new Shop(seller); public void shouldBuyBread() throws Exception { //given given(seller.askForBread()).willReturn(new Bread()); //when Goods goods = shop.buyBread(); //then assertThat(goods, containBread()); }
Stubbing con void y excepciones:
//given willThrow(new RuntimeException("boo")).given(mock).foo(); //when Result result = systemUnderTest.perform(); //then assertEquals(failure, result);