Question

Je suis en train d'automatiser les tests de prélivraison, en utilisant pde-maven-plugin, appels Maven ou des tâches de fourmi. J'ai suivi les instructions de l'article Automatiser Eclipse PDE Tests unitaires à l'aide Ant pour créer le test.xml

Tests ont échoué, d'abord parce que Aucun test trouvés

junit.framework.AssertionFailedError: junit.framework.AssertionFailedError: No tests found in com.example.TestSuite
    at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

J'ai cherché et trouvé que je devrais utiliser JUnit4Adapter, mais cela que je suis arrivé ClassCastException, voici la trace de la pile

java.lang.ClassCastException: junit.framework.JUnit4TestAdapter cannot be cast to junit.framework.Test
    at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader.getTest(JUnit3TestLoader.java:108)
    at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader.loadTests(JUnit3TestLoader.java:59)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    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:196)
    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:368)
    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:559)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1311)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1287)

Voici mes dépendances de plugin:

Require-Bundle: 
 org.eclipse.ui,
 org.eclipse.core.runtime,
 org.eclipse.jdt.core;bundle-version="3.4.2",
 org.eclipse.jdt.launching;bundle-version="3.4.1",
 org.eclipse.core.resources;bundle-version="3.4.1",
 org.apache.xerces;bundle-version="2.9.0",
 org.junit4;bundle-version="4.3.1"

et la classe de test

package com.example;

import junit.framework.JUnit4TestAdapter;
import junit.framework.Test;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses( { SimpleTests.class})
public class TestSuite {

    public static Test suite() {

        return new JUnit4TestAdapter(TestSuite.class);
    }

}

une idée comment résoudre?

Était-ce utile?

La solution

Il est fixé en ajoutant lignes suivantes lors de l'appel org.eclipse.equinox.launcher.Main:

<arg line="-testLoaderClass org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader"/>
<arg line="-loaderpluginname org.eclipse.jdt.junit4.runtime"/>

Voici la pleine tâche ant java:

<java dir="${plugin.dir}"  
    fork="yes"
    classname="org.eclipse.equinox.launcher.Main"
    classpathref="equinox.launcher.class.path"
    jvm="${jvm}">
    <arg line="-application ${application}"/>
    <arg line="-data ${test.reports.dir}/output/ws"/>
    <arg line="-port ${pde.test.port}"/>
    <arg line="-dev bin -clean -debug"/>
    <arg line="-testpluginname ${plugin.name}"/>
    <arg line="-testLoaderClass org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader"/>
    <arg line="-loaderpluginname org.eclipse.jdt.junit4.runtime"/>
    <arg line="-classnames ${test.classes.list}"/>
    <jvmarg line="${vmargs}"/>
</java>    

Autres conseils

J'ai eu le même problème que Noura et essayé le correctif ils ont fourni, qui, malheureusement, ne résout une partie du problème. Au lieu de jeter le ClassCastException mentionné ci-dessus, je me suis junit4 java.lang.Exception: No runnable methods, malgré mes 29 essais soigneusement annotés avec @Test.

Après quelques heures de recherche (et seulement trouver des bugs vraiment vieux en arrière quand JUnit 4 était nouveau) et l'expérimentation ( ce SO poster n'a pas aidé non plus), j'ai découvert la deuxième partie de ma solution était liée au chemin de classe.

J'avais défini mon chemin de classe (qui a été utilisé pour lancer PDETestResultsCollector, PDETestPortLocator et le plug-in de test) être:

<path id="test.class.path">
   <pathelement location="build/my-bundled-jar-with-tests.jar" /> <!-- contains my app and the PDE* helper classes -->
   <fileset dir="${test.eclipse.dir}/plugins">
      <include name="org.junit_4.*/**/junit.jar" />
      <include name="org.hamcrest.core_*.jar" />
      <include name="org.apache.ant_*/**/ant.jar" />
      <include name="org.apache.ant_*/**/ant-junit.jar" />
      <include name="org.eclipse.jdt.core_*.jar" />
      <include name="org.eclipse.jdt.junit_*.jar" />
      <include name="org.eclipse.jdt.junit.core_*.jar" />
      <include name="org.eclipse.equinox.common_*.jar" />
      <include name="org.eclipse.debug.core_*.jar" />
      <include name="org.eclipse.osgi_*.jar" />
      <include name="org.eclipse.core.resources_*.jar" />
      <include name="org.eclipse.core.runtime_*.jar" />
      <include name="org.eclipse.core.jobs_*.jar" />
      <include name="org.eclipse.ui.workbench_*.jar" />
      <include name="org.eclipse.swt_*.jar" />
      <include name="org.eclipse.equinox.preferences_*.jar" />
      <include name="org.eclipse.equinox.launcher_*.jar" />
   </fileset>
</path>

et a lancé comme:

<java classpathref="test.class.path" classname="org.eclipse.equinox.launcher.Main" fork="yes" dir="${basedir}" >
   <arg line="-application org.eclipse.pde.junit.runtime.uitestapplication" />
   <arg line="-data reports/output/ws" />
   <arg line="-dev bin -clean -port ${pde.test.port}" />
   <arg line="-testApplication org.eclipse.ui.ide.workbench" />
   <arg line="-testpluginname my-bundled-plugin-with-tests" />
   <arg line="-testLoaderClass org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader" />
   <arg line="-loaderpluginname org.eclipse.jdt.junit4.runtime" />
   <arg line="-classnames TestAllMyCode" />
</java>

Il se trouve que, ayant build/my-bundled-jar-with-tests.jar sur le classpath confondu le coureur de test, donc je devais faire un nouveau pot qui contenait seulement des fichiers de classe pour PDETestListener, PDETestPortLocator et PDETestResultsCollector (appelé pde-test.jar). Mon parcours fixe était:

<path id="test.class.path">
   <pathelement location="build/pde-test.jar" /> <!-- fixed the problem -->
   <fileset dir="${test.eclipse.dir}/plugins">
      <include name="org.junit_4.*/**/junit.jar" />
      <include name="org.hamcrest.core_*.jar" />
      ... <!-- same as before -->

Et les 29 tests ont été trouvés et ont couru.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top