Diferencia entre revisiones de «Inyeccion De Mocks De Mockito Con Spring»
(→Ejemplo) |
|||
(No se muestran 3 ediciones intermedias de 2 usuarios) | |||
Línea 2: | Línea 2: | ||
Luego, en la clase de test, pueden recuperarse con la anotación @Autowired para programarles comportamiento y realizar verificaciones. | Luego, en la clase de test, pueden recuperarse con la anotación @Autowired para programarles comportamiento y realizar verificaciones. | ||
− | |||
==Ejemplo== | ==Ejemplo== | ||
Línea 12: | Línea 11: | ||
... | ... | ||
<bean id="dao.BlahDao" class="org.mockito.Mockito" factory-method="mock"> | <bean id="dao.BlahDao" class="org.mockito.Mockito" factory-method="mock"> | ||
− | <constructor-arg type="java.lang.Class" value="com.dosideas.bleh.dao" /> | + | <constructor-arg |
+ | type="java.lang.Class" | ||
+ | value="com.dosideas.bleh.dao.impl.BlehDaoImpl" /> | ||
</bean> | </bean> | ||
... | ... | ||
Línea 74: | Línea 75: | ||
* [http://static.springsource.org/spring/docs/2.5.x/reference/beans.html#beans-factory-class-static-factory-method Static Factory Method en la Web oficial de Spring] | * [http://static.springsource.org/spring/docs/2.5.x/reference/beans.html#beans-factory-class-static-factory-method Static Factory Method en la Web oficial de Spring] | ||
− | [[Category: | + | [[Category: TDD]] |
[[Category: Spring Framework]] | [[Category: Spring Framework]] |
Revisión actual del 13:15 8 oct 2009
Es posible inyectar a través de Static Factory Method instancias de Mock Objects de Mockito con Spring Framework directamente desde el archivo de configuración.
Luego, en la clase de test, pueden recuperarse con la anotación @Autowired para programarles comportamiento y realizar verificaciones.
Ejemplo
Suponiendo un DAO con interface BlahDao e implementacion BlahDaoImpl del cual se quiere inyectar una maqueta (mock) en el BO BlehBo para su test de componentes, la configuración de spring sería la siguiente:
<beans>
... <bean id="dao.BlahDao" class="org.mockito.Mockito" factory-method="mock"> <constructor-arg type="java.lang.Class" value="com.dosideas.bleh.dao.impl.BlehDaoImpl" /> </bean> ... <bean id="business.BlehBo" class="com.dosideas.bleh.business.impl.BlehBoImpl"> <property name="blahDao" ref="dao.BlahDao"/> </bean> ...
Hay que notar que:
- En el lugar donde iría el nombre de la implementación de BlahDao, va el nombre de la clase fábrica, en este caso es la clase Mockito que crea los mocks.
- El atributo factory-method indica el método de la clase fábrica capaz de devolver instancias del bean que se desea crear. En este caso el método corresponde a la clase Mockito y es el que se utiliza para crear los mocks.
- Se pueden pasar argumentos al método de la fábrica. En ests caso se pasa como argumento la clase que se desea maquetar.
Haciendo una simplificación del problema, lo que hace Spring a partir de esta configuración sería algo parecido a esto:
...
import org.mockito.Mockito;
... BlahDao blahDao = Mockito.mock(BlahDao.class); ...
Comportamiento y Verificaciones
Desde la clase de test se puede recuperar la instancia de la clase a testear, como siempre, y se puede también recuperar la clase maquetada para darle comportamiento y realizar verificaciones:
@ContextConfiguration(locations = "...")
public class BlehBoComponenteTest {
@Autowired private BlehBo instance;
@Autowired private BlahDao blahDaoMock;
@Before public void setUp() { //init mocks MockitoAnnotations.initMocks(this);
//blahDaoMock doReturn(5) .when(blahDaoMock) .guardar(any(BlahEntity.class)); }
@Test public void test...() { ... verify(blahDaoMock).guardar(any(BlahEntity.class)); ... }
}