Diferencia entre revisiones de «Inyeccion De Mocks De Mockito Con Spring»
(→Ejemplo) |
|||
(No se muestran 9 ediciones intermedias de 2 usuarios) | |||
Línea 1: | Línea 1: | ||
− | Es posible inyectar a través de Static Factory Method instancias de | + | Es posible inyectar a través de Static Factory Method instancias de [[Mock Object]]s 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. | Luego, en la clase de test, pueden recuperarse con la anotación @Autowired para programarles comportamiento y realizar verificaciones. | ||
− | |||
==Ejemplo== | ==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: | + | 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: |
<code xml> | <code xml> | ||
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 id="business.BlehBo" class="com.dosideas.bleh.business.impl.BlehBoImpl"> | ||
+ | <property name="blahDao" ref="dao.BlahDao"/> | ||
</bean> | </bean> | ||
... | ... | ||
Línea 19: | Línea 24: | ||
Hay que notar que: | 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. | * 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 capaz de devolver instancias del bean que se desea crear | + | * 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 pasa como argumento la clase que se desea maquetar. | + | * 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: | |
− | |||
<code java> | <code java> | ||
... | ... | ||
import org.mockito.Mockito; | import org.mockito.Mockito; | ||
... | ... | ||
− | BlahDao | + | BlahDao blahDao = Mockito.mock(BlahDao.class); |
... | ... | ||
</code> | </code> | ||
− | 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: | + | ==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: | ||
<code java> | <code java> | ||
+ | @ContextConfiguration(locations = "...") | ||
public class BlehBoComponenteTest { | public class BlehBoComponenteTest { | ||
Línea 67: | Línea 73: | ||
* [[Instanciacion De Objetos Con Spring]] | * [[Instanciacion De Objetos Con Spring]] | ||
* [[Mockito]] | * [[Mockito]] | ||
+ | * [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: TDD]] | |
− | + | [[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)); ... }
}