2009-02-11 18 views
10

Estoy desarrollando una característica de Eclipse que consta de varios plugins de Eclipse, utilizando Equinox Declarative Services (DS) para conectar los complementos entre sí en el tiempo de ejecución. Me gustaría agregar pruebas de integración para verificar la configuración del equinoccio.Prácticas recomendadas para pruebas de integración de funciones de Eclipse

En particular, quiero verificar que

  • los componentes de servicio se unen juntos como espera
  • los paquetes se activan
  • los plugins compartir información como se esperaba (ver Editar 2)

Además, quiero que esta prueba de integración sea parte de mi cont proceso de integración inusual utilizando una construcción sin cabeza Eclipse PDE (como se describe here y here).

Mi pregunta es: Me puede recomendar o no un marco, herramientas o prácticas que faciliten este tipo de pruebas de integración dentro de las limitaciones que he identificado?

he encontrado dos cables hasta el momento:

  • Spring Dynamic Modules incluye un marco para las pruebas de integración OSGi. Sin embargo, no he podido obtener una prueba simple de Spring DM para ejecutar dentro de Eclipse. Se queja de que "la plataforma ya se está ejecutando".
  • Pax Exam (anteriormente Pax Drone) es otro marco de prueba de integración OSGi.

Editar: Para aclarar, cada plugin tiene un componente de servicio OSGi configurado con un archivo XML de definición de componente. Un error en uno de estos archivos de configuración no romperá las dependencias de los complementos y podría pasar desapercibido hasta el tiempo de ejecución. La prueba de integración es necesaria para detectar dicha falla.

Edit 2: Hasta ahora, todo lo que he visto parece confirmar la afirmación de Uri (ver a continuación) que las características de Eclipse multi-plugin no están probadas de integración a nivel de producto/función. Estoy dispuesto a pasar sin pruebas integrales de integración si puedo al menos verificar automáticamente que los componentes del servicio se unen correctamente.

Mi enfoque (no funciona todavía):

 

In a JUnit test do 
    For each bundle/plugin of interest 
     Get the osgi Bundle object with org.eclipse.core.runtime.Platform.getBundle() 
     Verify that the Bundle is active with Bundle.getState() 
     Verify that the Bundle is using the expected services with Bundle.getServicesInUse() 
     Verify that the Bundle has registered the expected services with Bundle.getRegisteredServices() 
 

estoy corriendo mi código con una configuración de lanzamiento de Eclipse Plug-in de prueba, el lanzamiento de mi producto Eclipse como el "Programa para ejecutar". Cuando se ejecutan las pruebas, puedo verificar que los paquetes estén activos, pero los componentes del servicio no se activan y los métodos getServicesInUse y getRegisteredServices devuelven nulo. Cargué una clase de cada paquete en caso de que se tratara de un problema de activación lenta, pero eso no ayudó. También verifiqué que todos los componentes del servicio son componentes "inmediatos", por lo que deben activarse tan pronto como se activen los paquetes. ¿Por qué Equinox DS no hace su magia?

+0

@Yossi Dahan: Después de esta pregunta, has encontrado una manera de poner en práctica estas 'pruebas de integración' en OSGi/Equinox? Estamos enfrentando la misma pregunta en este momento – maasg

Respuesta

2

Escribimos nuestro propio marco poca ejecución de la prueba basado en una combinación de los enfoques: a) bundletestcollector RCP (http://rcpquickstart.com/2008/06/12/running-unit-tests-for-rcp-and-osgi-applications/) Esto está escrito por Pascal Rapidcault que es uno de los principales tipos de RCP. Recoge las clases de prueba de paquetes en un entorno OSGi corriendo.

b) el marco de prueba knopflerfish (http://knopflerfish.org/releases/2.1.1/knopflerfish_osgi_tests_2.1.1.zip) Registra los casos de prueba como servicios que pueden ser ejecutados por un corredor de prueba. También hay una salida XML, que, desgraciadamente, difiere un poco de formato XML junit hormiga.

De esta manera podemos ejecutar pruebas de integración que vivan en paquetes de prueba separados, así como también pruebas más cercanas a las pruebas unitarias clásicas y fragmentos en vivo de sus paquetes bajo prueba (ver http://rcpquickstart.com/2007/06/20/unit-testing-plug-ins-with-fragments/).

Cuestiones relacionadas