Tengo un proyecto de Primavera módulo múltiples que he creado usando Maven:¿Recursos de prueba de las dependencias que no están en classpath?
my-root (pom)
- my-logic
- my-webapp (depending on my-logic)
- my-consoleapp (depending on my-logic)
Mis clases de prueba heredan de AbstractTransactionalJUnit4SpringContextTests
y utilizan @ContextCofiguration
para configurar el ApplicationContext
.
E.g. la clase de prueba para un controlador de primavera:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"classpath:applicationContext-logic-test.xml",
"classpath:applicationContext-web-test.xml"})
public class ControllerTest extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired
private ApplicationContext applicationContext;
...
}
Como puede ver, hay un XML de configuración por módulo. Tengo configuraciones separadas para tesear, que residen en pruebas/recursos de cada módulo (y que además tienen el sufijo "-test"). Todo esto funciona (la clase compila, ejecuta y las pruebas JUnit son exitosas) if Ejecuto la prueba JUnit en Eclipse.
Ahora a mi problema: Ejecutar la prueba con Maven ¡NO funcionará! (por ejemplo, con "Ejecutar como"> "Instalación de Maven" en my-root
(uso m2eclipse)). En concreto, se lanzará la siguiente excepción:
java.io.FileNotFoundException: ruta de clase de recurso [applicationContext-lógica-test.xml] no se puede abrir porque no exist`
Parece que Maven no agrega los archivos desde my-logic/src/test/resources
al classpath que se configura al ejecutar las pruebas unitarias de my-webapp
.
¿Cómo puedo solucionar eso?
¡Muchas gracias por esta excelente respuesta! Usé esta solución y funciona. Ahora que ha explicado esto, es obvio para mí que los recursos de prueba de todas las dependencias (externas) no se incluyen en la ruta de clases. ¿Cómo deberían? Pero de alguna manera sería bueno si se incluyeran recursos de mis propios módulos. Aunque no sé exactamente cómo funcionaría esto, ahora que lo pienso;) – apropoz
@apropoz De nada. La idea de Maven es que los módulos son autónomos: puedes pagar un solo módulo sin sus hermanos y construirlo. Cualquier cosa que implique caminos relativos rompería esto, lo cual no es deseable. –