unitarias tutorial test software pruebas para espaƱol ejercicios ejemplo configuracion java testing junit eclipse-pde eclipse-3.4

tutorial - software para pruebas unitarias en java



Pruebas de unidad de automatizaciĆ³n(junit) para el desarrollo de Eclipse Plugin (7)

Aquí hay una herramienta que puedo recomendar si alguien es molestado por TDD: Infinitest

Breve descripción extraída del sitio Infinitest:

¿Qué es infinito?

Infinitest es un corredor de prueba continuo diseñado para facilitar el desarrollo impulsado por prueba. Infinitest te ayuda a aprender TDD al proporcionar retroalimentación mientras trabajas, y te ayuda a dominar TDD reduciendo tu ciclo de retroalimentación de minutos a meros segundos.

Cada vez que cambia una clase, Infinitest ejecuta sus pruebas por usted. Es inteligente sobre qué pruebas ejecutar y solo ejecuta las que necesita. Si se produce algún error, los informa de forma clara y concisa. Esto le brinda información instantánea sobre la corrección semántica de su código, del mismo modo que los IDE modernos le brindan información instantánea sobre los errores de sintaxis.

Estoy desarrollando complementos de Eclipse, y necesito poder automatizar la creación y ejecución del conjunto de pruebas para cada complemento. (Usando Junit)

Las pruebas están funcionando dentro de Eclipse, y puedo dividir los complementos en el plugin actual y un plugin de fragmentos para pruebas unitarias, como se describe aquí , aquí y en un par de lugares aquí .

Sin embargo, cada uno de los enfoques anteriores genera el mismo problema: el comando Java ant task / commandline que emite la compilación o debe desencadenar la prueba, no genera efectos secundarios observables y devuelve el valor "13". Intenté todo lo que pude encontrar y aprendí bastante sobre cómo se inicia Eclipse (por ejemplo: desde v3.3 ya no puedes usar startup.jar, no existe, pero deberías usar org.eclipse.equinox.launcher ). Desafortunadamente, aunque aparentemente es información necesaria, está lejos de ser suficiente.

Estoy trabajando con Eclipse 3.4, Junit 4.3.1 (el paquete org.junit4, pero prefiero usar JUnit 4.4. Ver aquí ).

Entonces, mi pregunta es: ¿cómo automatizas exactamente la compilación y la prueba de los complementos de Eclipse?

Editar: para aclarar, quiero usar algo como hormiga + control de crucero, pero ni siquiera puedo hacer que las pruebas de la unidad se ejecuten fuera de Eclipse. Digo "algo así" porque hay otras tecnologías que logran lo mismo, y no soy tan exigente como para descartar una solución que funcione solo porque está usando decir, Maven o Buckminster, si esas tecnologías lo hacen sustancialmente más fácil.

Edit2: El ''Java Result 13'' mencionado anteriormente parece ser causado por la imposibilidad de encontrar el coretestrunner. Del registro:

java.lang.RuntimeException: Application "org.eclipse.test.coretestapplication" could not be found in the registry. The applications available are: org.eclipse.equinox.app.error, com.rcpquickstart.helloworld.application. at org.eclipse.equinox.internal.app.EclipseAppContainer.startDefaultApp(EclipseAppContainer.java:242) at org.eclipse.equinox.internal.app.MainApplicationLauncher.run(MainApplicationLauncher.java:29) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:382) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504) at org.eclipse.equinox.launcher.Main.run(Main.java:1236) at org.eclipse.equinox.launcher.Main.main(Main.java:1212) at org.eclipse.core.launcher.Main.main(Main.java:30) !ENTRY org.eclipse.osgi 2 0 2008-11-04 21:02:10.514 !MESSAGE The following is a complete list of bundles which are not resolved, see the prior log entry for the root cause if it exists: !SUBENTRY 1 org.eclipse.osgi 2 0 2008-11-04 21:02:10.515 !MESSAGE Bundle update@plugins/org.eclipse.test_3.2.0/ [34] was not resolved. !SUBENTRY 2 org.eclipse.test 2 0 2008-11-04 21:02:10.516 !MESSAGE Missing required bundle org.apache.ant_0.0.0. !SUBENTRY 2 org.eclipse.test 2 0 2008-11-04 21:02:10.516 !MESSAGE Missing required bundle org.eclipse.ui.ide.application_0.0.0. !SUBENTRY 1 org.eclipse.osgi 2 0 2008-11-04 21:02:10.518 !MESSAGE Bundle update@plugins/org.eclipse.ant.optional.junit_3.2.100.jar [60] was not resolved. !SUBENTRY 2 org.eclipse.ant.optional.junit 2 0 2008-11-04 21:02:10.519 !MESSAGE Missing host org.apache.ant_[1.6.5,2.0.0). !SUBENTRY 2 org.eclipse.ant.optional.junit 2 0 2008-11-04 21:02:10.519 !MESSAGE Missing required bundle org.eclipse.core.runtime.compatibility_0.0.0.


Utilice Ant and CruiseControl , llame a las pruebas unitarias en el script Ant y en el resto de su lógica de compilación y las pueda ejecutar con cada iteración de compilación, luego CruiseControl puede automatizar sus llamadas a compilación y ejecutar estas pruebas cada vez.


Acabo de hacer que las pruebas JUnit funcionen como parte de la construcción sin cabeza para nuestra aplicación RCP.

Encontré este artículo: la automatización de las pruebas unitarias Eclipse PDE usando Ant es increíblemente útil. Proporciona código y enfoque para que comiences. Sin embargo, una cantidad de cosas que descubrí:

Sobre el código del artículo

  • solo había un paquete bajo pruebas (hemos separado nuestro proceso de compilación del código, usando Buckminster )
  • solo había una clase de prueba.
  • estos fueron ambos efectivamente codificados en el script de construcción

Acerca de Eclipse PDE

  • la aplicación de uitestapplication requiere otra testApplication . El uso de coretestapplication no.
  • ya que estas aplicaciones están en paquetes que tienen dependencias en SWT. Este es un asesino de reparto en la mayoría de las circunstancias, aunque no si su máquina de compilación es una caja de Windows. Me encantaría ver estos divididos en paquetes que no sean UI.

Descubrí que el código proporcionado era un buen punto de partida, pero tenía una serie de suposiciones implícitas en su implementación.

Habiendo descubierto estas suposiciones, hacer el trabajo fue relativamente sencillo.

Nuestra nueva y brillante configuración

  • Buckminster construye los paquetes.
  • el objetivo copia los paquetes de la plataforma de destino, org.eclipse.pde.runtime y org.eclipse.jdt.junit en un "tester-eclipse-install". Esto debería ocuparse de su problema Java Result 13 .
  • encontrar los fragmentos de prueba de mirar el espacio de trabajo
  • encontrar el fragmento de host de mirar el manifiesto
  • encuentre las clases de prueba al mirar el proyecto en el espacio de trabajo.
  • registrar un PDETestListener modificado para manejar múltiples clases de prueba
  • invoque the tester-eclipse-install con las múltiples clases de prueba.

También leí Build and Test Automation para plug-ins y funciones, pero no estamos usando PDE-Build directamente.


En cuanto a su excepción, dice que falta la aplicación corete. El objetivo ant se puede encontrar en plugins / org.eclipse.test_3.1.0 / library.xml: 10

Esto es realmente un problema de dependencia. Eclipse necesita tener todos los complementos para poder compilar.

Para configurarlo correctamente, hay 2 archivos para mirar.

  1. El archivo del producto
  2. El feature.xml

Producto

Asegúrese de que el archivo del producto contiene todos los complementos que necesita.

Después de eso, agregue las características org.eclipse.rcp y org.eclipse.test

... los plugins están arriba ...

<features> <feature id="mock_feature" version="1.0.0"/> <feature id="mock_feature_test" version="1.0.0"/> <feature id="org.eclipse.rcp" version="3.2.0.v20060609m-SVDNgVrNoh-MeGG"/> <feature id="org.eclipse.test" version="3.2.0.v20060220------0842282442"/> </features>

Necesita org.eclipse.test para ejecutar las pruebas y org.eclipse.rcp para ejecutar eclipse para ejecutar las pruebas.

No olvides establecer useFeatures en ''verdadero''

<product name="mock" id="com.example.mock" application="com.example.mock.application" useFeatures="true">

feature.xml

Suponiendo que tiene una función para probar, debe agregar 2 complementos adicionales.

... otros complementos arriba ...

<plugin id="org.apache.ant" download-size="0" install-size="0" version="0.0.0"/> <plugin id="org.eclipse.core.runtime.compatibility" download-size="0" install-size="0" version="0.0.0" unpack="false"/>

Las pruebas necesitan org.apache.ant para ejecutar las pruebas y org.eclipse.core.runtime.compatibility para el lanzamiento.

Otra gotcha

Asegúrese de que en su eclipse de destino (la copia del eclipse que usa para compilar), solo haya 1 copia de cada complemento. Por ejemplo, si hay 2 versiones de complementos com.ibm.icu en la carpeta del complemento, eclipse usaría el más nuevo. Como el plugin pde build está configurado para usar una versión específica, eclipse se quejaría de que no puede encontrar el plugin particular, incluso cuando está allí.

Algunos pensamientos

Todo el proceso de construir un eclipse podría ser mucho mejor. De hecho, recibí el proceso principalmente por prueba y error. La documentación está desactualizada y es escasa. Los mensajes de error no ayudan. Solo te deja sintiéndote impotente y frustrado. ¡Esperamos que esta publicación ayude a un compañero programador a ahorrar algo de tiempo!


Como alternativa a Ant, he tenido una buena experiencia en el uso de la nueva marca Maven + Tycho con Hudson. Tycho proporciona soporte completo para el desarrollo de Osgi y Eclipse en Maven. Actualmente está en desarrollo, pero la mayoría de las características que necesitaba funcionaban. Solo necesita muy poca configuración de su lado, ya que puede analizar archivos MANIFEST.MF.

Si tienes algo de experiencia con Maven, no es muy difícil comenzar a trabajar con él. Hudson es un poco más problemático debido a la falta de soporte de Maven 3. (Tycho usa la versión de desarrollo de Maven 3)

Enlaces para comenzar:


Estamos utilizando las secuencias de comandos de compilación de PDE (consulte esta pregunta ) y exportamos archivos de compilación para nuestros plugins de prueba de unidad. Estos scripts de compilación ant se invocan luego desde los scripts de compilación de PDE (customTargets.xml) utilizando la ant-task "ant". Desafortunadamente, esto solo funciona con JUnit3. Se supone que hay un adaptador JUnit4 para JUnit3, por lo que puede ejecutar pruebas JUnit4 desde un corrector de prueba JUnit3.

Probablemente nos mudemos a algo como Maven; los scripts de construcción PDE no están realmente diseñados para lo que tenemos que hacer con ellos.


Para cualquiera que esté buscando una forma de ejecutar las pruebas de plugins de Eclipse fuera de Eclipse, el siguiente comando funciona para mí:

java -Xms40m -Xmx1024m -XX:MaxPermSize=512m -Dorg.eclipse.swt.browser.DefaultType=mozilla -Declipse.pde.launch=true -classpath C:/eclipse/eclipse-standard-luna-M2-win32-x86_64/eclipse/plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar org.eclipse.equinox.launcher.Main -port 22 -testLoaderClass org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader -loaderpluginname org.eclipse.jdt.junit4.runtime -classNames testpackage.testClass -application org.eclipse.pde.junit.runtime.uitestapplication -data C:/temp/log.temp -dev bin -consoleLog -testpluginname PluginName

-classpath debe establecerse en Eclipse launcher jar. Puede obtener la versión exacta para su Eclipse del archivo eclipse.ini .

-className es el nombre del archivo de prueba del complemento junit

-data se establece en un archivo temporal.

-testpluginname es el nombre del complemento que desea probar.