Tengo una definición de Spring XML bean para la que quiero escribir pruebas de integración. La definición de bean XML es parte de un contexto de aplicación más grande donde se incluyen varios de estos archivos usando <import>
. Dentro de la definición, hago referencia a varios beans que provienen de otros archivos.Ejemplificación de simulación automática en una prueba de Spring JUnit
Para mi prueba de integración me gustaría crear una instancia de la definición independiente y usar Mockito mocks para todos los otros beans. Hasta ahora, estoy usando algo como esto:
FooIntegrationTest.java
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class FooIntegrationTest {
@Autowired private ClassUnderTest underTest;
@Autowired private MockedClass mock;
@Test
public void testFoo() {
}
}
FooIntegrationTest-context.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="part-to-test.xml" />
<bean id="mockedClassReferencedByName" class="org.mockito.Mockito" factory-method="mock" c:classToMock="SomeMockedClass" />
<bean class="org.mockito.Mockito" factory-method="mock" c:classToMock="OtherMockedClassReferencedByType" />
<bean class="org.mockito.Mockito" factory-method="mock" c:classToMock="MockedClass" />
...
</beans>
me gustaría para automatizar la sección de burla bastante tedioso : Idealmente, quisiera que todos los beans que no se encuentran en el contexto de la aplicación se burlen automáticamente. El part-to-test.xml
usa @Autowired
, así como los beans que se establecen utilizando referencias de nombre. Solo uso archivos XML de definición de bean, y tampoco uso las clases @Configuration
ni las anotaciones @Component
.
He examinado cómo usar un cargador de contexto personalizado en @ContextConfiguration(loader=...)
, pero todavía no he encontrado un punto de extensión adecuado para hacerlo. Sprinockito no parece abordar este problema.
¿Hay algún otro proyecto que solucione este problema? Si no, ¿dónde extendería Spring para crear los simulacros automáticamente?
¿Has probado la anotación Mockito @InjectMocks? ¿De qué manera no cumple con sus requisitos? –
@DavidWallace '@ InjectMocks' funciona muy bien para las pruebas unitarias, es decir, prueba una clase particular donde la prueba utiliza objetos simulados. Sin embargo, me gustaría burlarme de todos los objetos a los que se hace referencia en una definición de Spring Bean. Esto significa que necesito poblar el contexto de la aplicación Spring con simulacros (posiblemente con nombre) - No sé cómo '@ InjectMocks' ayuda a hacer esto. –
Bien, voy a pensar en esto un poco más. –