unitarias tutorial pruebas probar example español con clase java eclipse unit-testing junit eclipse-pde

java - tutorial - Ejecución de las pruebas de Eclipse Junit Plugin con Junit 4.4 o posterior: ¿por qué no se detectan las pruebas?



pruebas junit en java (9)

Necesito usar JUnit 4.4 (o más reciente) en un conjunto de pruebas de plugins de eclipse, pero me he encontrado con el siguiente problema:

Las pruebas no se detectan cuando se ejecutan con los paquetes junit 4.4 o 4.5 de springsource ( junit44 y junit45 ). El paquete org.junit4 que se puede obtener con eclipse suministra el punto 4.3 (a partir de Ganymead / Eclipse 3.4). El paquete org.junit4 funciona porque identifica y ejecuta las pruebas, pero no es compatible con las últimas versiones de JMock, y necesito usar una biblioteca de burla.

Aquí hay una prueba de muestra:

package testingplugin; import static org.junit.Assert.*; import org.junit.Test; public class ActivatorTest { @Test public final void testDoaddTest() { fail("Not yet implemented"); } }

Al ejecutar esta prueba, recibo la siguiente excepción:

java.lang.Exception: No runnable methods at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:33) at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42) at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34) at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) at org.eclipse.pde.internal.junit.runtime.RemotePluginTestRunner.main(RemotePluginTestRunner.java:62) at org.eclipse.pde.internal.junit.runtime.CoreTestApplication.run(CoreTestApplication.java:23) 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.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:574) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:195) 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)

Sin embargo, si cambio las dependencias del proyecto de com.springsource.org.junit a org.junit4, entonces la prueba se ejecuta y falla (como se esperaba).

Estoy ejecutando la prueba como un JUnit Plug-in Test en Eclipse, con los siguientes argumentos del programa:

-os $ {target.os} -ws $ {target.ws} -arch $ {target.arch} -nl $ {target.nl}

Los siguientes complementos seleccionados durante el lanzamiento (seleccionados por mí, luego usé "agregar complementos necesarios" para obtener el resto de las dependencias):

Workspace: testingPlugin Target Platform: com.springsource.org.hamcrest.core (1.1.0) com.springsource.org.junit (4.5.0) ....and a bunch of others... (nothing related to testing was auto-selected)

Aquí está mi MANIFEST.MF:

Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: TestingPlugin Plug-in Bundle-SymbolicName: testingPlugin Bundle-Version: 1.0.0 Bundle-Activator: testingplugin.Activator Import-Package: org.osgi.framework;version="1.3.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Require-Bundle: com.springsource.org.junit;bundle-version="4.5.0"

Cambiar la última línea a:

Require-Bundle: org.junit4;bundle-version="4.3.1"

Y actualizando los complementos seleccionados en el lanzamiento para:

Workspace: testingPlugin Target Platform: org.junit4 (4.3.1) ...bunches of auto-selected bundles... (again, nothing else test related)

Hace que la prueba se ejecute correctamente (pero con la versión incorrecta de junit).


No sé qué versión de JUnit era, pero para encontrar con éxito la prueba, el nombre de los métodos de prueba debe comenzar con la palabra " prueba ".

En la versión más nueva, simplemente puede marcar la prueba con @Test, para mí funciona en esta combinación:

import static junit.framework.Assert.*; ... @Test public void testDummy() throws Exception


ActivatorTest necesita extender TestCase


Tal vez su paquete JUnit falta una entrada en el MANIFEST.MF:

Paquete de importación dinámica: *

Esto es obligatorio para cargar clases de otros paquetes.

Bebbo


No puedo probar esto ahora, ya que no tengo a mano una instalación de Eclipse 3.4, pero hace un tiempo me encontré con un problema similar en (creo) IntelliJ IDEA 7.0.x, y una solución fue especificar explícitamente una prueba corredor.

Con JUnit 4.5:

import org.junit.runners.JUnit4; @RunWith(JUnit4.class) public class ActivatorTest { //... }

Si esto no funciona, puede tener más éxito con org.junit.runners.BlockJUnit4ClassRunner

Para JUnit 4.4 probaría org.junit.internal.runners.JUnit4ClassRunner

EDITAR: no estoy seguro del com.springsource. parte porque no uso Springsource. De su pregunta parece que springsource reempaqueta JUnit bajo com.springsource.org.junit pero usted usa simplemente org.junit en su código así que me quedaré con eso.


Me pregunto si es posible que deba importar la etiqueta @Test de com.springsource.org.junit y no de org.junit.

Volker


Recientemente tuve algunos problemas de sonido similares con jMock, JUnit y Eclipse, aunque no con las pruebas de complementos .

No estoy seguro de si es relevante, pero lo tengo todo funcionando con las siguientes versiones:

  • jmock-2.5.1.jar
  • hamcrest-core-1.1.jar
  • hamcrest-library-1.1.jar
  • jmock-junit4-2.5.1.jar

También encontré que tenía que usar el corredor de prueba JMock así:

import org.junit.Test; import org.junit.runner.RunWith; import org.jmock.Mockery; import org.jmock.Expectations; import org.jmock.integration.junit4.JUnit4Mockery; import org.jmock.integration.junit4.JMock; @RunWith(JMock.class) public class PublisherTest { Mockery context = new JUnit4Mockery(); @Test public void oneSubscriberReceivesAMessage() {


@RunWith (Suite.class) @SuiteClasses ({UserServiceTest.class, ABCServiceTest.class})

clase pública AllTestSuite {

suite de pruebas estática pública () {

return new JUnit4TestAdapter(AllTestSuite .class); }

}


Creo que el marco de prueba de primavera no es compatible con junio 4.4+


Según mi experiencia, esto sucede si el complemento que contiene las pruebas de complemento no depende de junit. Después de agregar la dependencia junit 4.4 a mi archivo MANIFEST.MF, el error desapareció y todas las pruebas se ejecutaron. La dependencia de junit debe ser opcional porque el complemento generalmente solo lo necesita para el código de prueba.