java - tutorial - junit framework testcase jar



Esecuzione dei test di Eclipse Junit Plugin con Junit 4.4 o successivi-perché non vengono rilevati i test? (6)

Ho bisogno di usare JUnit 4.4 (o più recente) in una serie di test per plug-in di eclipse, ma ho riscontrato il seguente problema:

I test non vengono rilevati durante l'esecuzione con i bundle junit 4.4 o 4.5 da sorgenti ( junit44 e junit45 ). Il pacchetto org.junit4 che può essere ottenuto con eclipse fornisce junit 4.3 (a partire da Ganymead / Eclipse 3.4). Il bundle org.junit4 funziona in quanto identifica ed esegue i test, ma non è compatibile con le ultime versioni di JMock e ho bisogno di utilizzare una libreria di simulazione.

Ecco un test di esempio:

package testingplugin;

import static org.junit.Assert.*;
import org.junit.Test;

public class ActivatorTest {
   @Test
   public final void testDoaddTest() {
      fail("Not yet implemented");
   }
}

Durante l'esecuzione di questo test, ricevo la seguente eccezione:

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)

Tuttavia, se cambio le dipendenze del progetto da com.springsource.org.junit a org.junit4, il test viene eseguito e fallisce (come previsto).

Sto eseguendo il test come test plug-in JUnit in Eclipse, con i seguenti argomenti del programma:

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

I seguenti plug-in selezionati durante il lancio (selezionati da me, quindi ho usato "aggiungi plugin richiesti" per ottenere il resto delle dipendenze.):

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)

Ecco il mio 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"

Passare l'ultima riga a:

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

E aggiornando i plug-in selezionati al momento del lancio:

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

Fa funzionare correttamente il test (ma con la versione sbagliata di junit).


Non so quale versione di JUnit fosse, ma per trovare con successo il test i metodi di test devono iniziare con la parola " test ".

Nella versione più recente puoi semplicemente contrassegnare il test con @Test, per me funziona in questa combinazione:

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

ActivatorTest deve estendere TestCase


Non posso testarlo subito perché non ho un'installazione di Eclipse 3.4 a portata di mano, ma ho avuto un problema simile qualche tempo fa in IntelliJ IDEA 7.0.x, e una soluzione era di specificare esplicitamente un test corridore.

Con JUnit 4.5:

import org.junit.runners.JUnit4;

@RunWith(JUnit4.class)
public class ActivatorTest {
    //...
}

Se questo non funziona potresti avere più successo con org.junit.runners.BlockJUnit4ClassRunner

Per JUnit 4.4 proverei org.junit.internal.runners.JUnit4ClassRunner

EDIT: non troppo sicuro sulla com.springsource. parte come non uso Springsource. Dalla tua domanda sembra che springource reimballaggi JUnit sotto com.springsource.org.junit ma tu usi solo org.junit nel tuo codice, quindi rimarrò con quello.


Ho avuto alcuni problemi di suono simili con jMock, JUnit ed Eclipse di recente , anche se non necessariamente con i test dei plugin .

Non sono sicuro se sia pertinente, ma ho capito che tutto funziona con le seguenti versioni: -

  • jMock-2.5.1.jar
  • hamcrest-core-1.1.jar
  • hamcrest-biblioteca-1.1.jar
  • jMock-junit4-2.5.1.jar

Ho anche scoperto che dovevo usare il test runner di JMock in questo modo:

  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() {

Penso che il framework di testing primaverile non sia compatibile con junit 4.4+


Nella mia esperienza ciò accade se il plugin che contiene i test del plug-in non dipende da junit. Dopo aver aggiunto la dipendenza di junit 4.4 al mio file MANIFEST.MF, l'errore è andato via e tutti i test sono stati eseguiti. La dipendenza da junit dovrebbe essere opzionale in quanto il plugin di solito ne ha bisogno solo per il codice di test.





eclipse-pde