2011-08-04 10 views
9

Tal vez alguien me puede ayudar, estoy tratando de escribir mi primera prueba de unidad de gwt, pero aquí está el problema, cuando ejecuto mi prueba con maven I obtener este error:GWT error de prueba NoClassDefFoundError: com/google/gwt/dev/cfg/Condición

> java.lang.NoClassDefFoundError: com/google/gwt/dev/cfg/Condition  at 
> com.google.gwt.junit.client.GWTTestCase.createStrategy(GWTTestCase.java:340) 
> at 
> com.google.gwt.junit.client.GWTTestCase.getStrategy(GWTTestCase.java:257) 
> at 
> com.google.gwt.junit.client.GWTTestCase.getSyntheticModuleName(GWTTestCase.java:275) 
> at 
> com.google.gwt.junit.client.GWTTestCase.setName(GWTTestCase.java:321) 
> at junit.framework.TestSuite.createTest(TestSuite.java:63) at 
> junit.framework.TestSuite.addTestMethod(TestSuite.java:283) at 
> junit.framework.TestSuite.<init>(TestSuite.java:146) at 
> org.junit.internal.runners.JUnit38ClassRunner.<init>(JUnit38ClassRunner.java:71) 
> at 
> org.junit.internal.builders.JUnit3Builder.runnerForClass(JUnit3Builder.java:14) 
> at 
> org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) 
> at 
> org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29) 
> at 
> org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) 
> at 
> org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24) 
> at 
> org.apache.maven.surefire.junit4.JUnit4TestSet.<init>(JUnit4TestSet.java:45) 
> at 
> org.apache.maven.surefire.junit4.JUnit4DirectoryTestSuite.createTestSet(JUnit4DirectoryTestSuite.java:56) 
> at 
> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.locateTestSets(AbstractDirectoryTestSuite.java:96) 
> at 
> org.apache.maven.surefire.Surefire.createSuiteFromDefinition(Surefire.java:209) 
> at org.apache.maven.surefire.Surefire.run(Surefire.java:156) at 
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
> at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
> at java.lang.reflect.Method.invoke(Method.java:601)  at 
> org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345) 
> at 
> org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009) 
> Caused by: java.lang.ClassNotFoundException: 
> com.google.gwt.dev.cfg.Condition at 
> java.net.URLClassLoader$1.run(URLClassLoader.java:366) at 
> java.net.URLClassLoader$1.run(URLClassLoader.java:355) at 
> java.security.AccessController.doPrivileged(Native Method) at 
> java.net.URLClassLoader.findClass(URLClassLoader.java:354) at 
> java.lang.ClassLoader.loadClass(ClassLoader.java:423)  at 
> sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)  at 
> java.lang.ClassLoader.loadClass(ClassLoader.java:356) 

Aquí está mi caso_prueba:

public class TelekanalServiceImplTest extends GWTTestCase { 

    @Override 
    public String getModuleName() { 
     // TODO Auto-generated method stub 
     return "com.karq.tvkava.tvkavaJUnit"; 
    } 



    public void testTelekanalService(){ 
     // Create the service that we will test. 
     TelekanalServiceAsync telekanalService = GWT.create(TelekanalService.class); 
     ServiceDefTarget target = (ServiceDefTarget) telekanalService; 
     target.setServiceEntryPoint(GWT.getModuleBaseURL() + "tvkava/telekanalService"); 

     // Since RPC calls are asynchronous, we will need to wait for a response 
     // after this test method returns. This line tells the test runner to wait 
     // up to 10 seconds before timing out. 
     delayTestFinish(10000); 
     //Test data 
     Telekanal telekanal = new Telekanal(); 
     telekanal.setNimetus("test"); 
     telekanal.setKirjeldus("see on test"); 
     // Send a request to the server. 
     telekanalService.saveOrUpdateTelekanal(telekanal, new AsyncCallback<Void>() { 
      public void onFailure(Throwable caught) { 
      // The request resulted in an unexpected error. 
      fail("Request failure: " + caught.getMessage()); 
      } 

      public void onSuccess(Void result) { 
      // Verify that the response is correct. 
      boolean isSaved = true; 
      assertTrue(isSaved); 
      // Now that we have received a response, we need to tell the test runner 
      // that the test is complete. You must call finishTest() after an 
      // asynchronous test finishes successfully, or the test will time out. 
      finishTest(); 
      } 
     }); 
    } 

} 

Y en com.karq.tvkava he llamado archivo de módulo tvKavaJUnit.gwt.xml

<?xml version="1.0" encoding="UTF-8"?> 
<module> 
    <!-- Inherit our applications main module.      --> 
    <inherits name='com.karq.tvkava.tvkava'/> 

    <!-- Specify the path to any remote services.     --> 
    <servlet path="/tvkava/telekanalService" class="com.karq.tvkava.server.services.TelekanalServiceImpl" /> 

</module> 

Y por supuesto tengo el módulo principal en com.karq.tvkava y su llamada tvkava.gwt.xml

<?xml version="1.0" encoding="UTF-8"?> 
<module rename-to='tvkava'> 
    <!-- Inherit the core Web Toolkit stuff.      --> 
    <inherits name='com.google.gwt.user.User'/> 

    <!-- Inherit the default GWT style sheet. You can change  --> 
    <!-- the theme of your GWT application by uncommenting   --> 
    <!-- any one of the following lines.       --> 
    <inherits name='com.google.gwt.user.theme.standard.Standard'/> 
    <!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> --> 
    <!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/>  --> 

    <!-- Other module inherits          --> 
<inherits name='net.sf.gilead.Gilead4Gwt'/> 
<source path='client/service' /> 
    <source path='shared'/> 
    <!-- Specify the app entry point class.       --> 
    <entry-point class='com.karq.tvkava.client.tvkava'/> 

    <!-- Specify the paths for translatable code     --> 
    <source path='client'/> 
    <source path='shared'/> 

</module> 
+0

los solucionaron esto? –

Respuesta

4

¿Tiene tanto gwt-user.jar y gwt-dev.jar en la ruta de clase?

+0

Sí, tengo esos en mi classpath. – karq

10

He conseguido éxito seguro para trabajar sin problemas con mis pruebas GWT, dar salida a los resultados apropiados y en su defecto la acumulación cuando hay fallos en la prueba. En mi POM, tengo éxito seguro configurado de este modo:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.12</version> 
    <configuration> 
     <additionalClasspathElements> 
      <additionalClasspathElement>${project.build.sourceDirectory}</additionalClasspathElement> 
      <additionalClasspathElement>${project.build.testSourceDirectory}</additionalClasspathElement> 
     </additionalClasspathElements> 
     <useSystemClassLoader>true</useSystemClassLoader> 
     <useManifestOnlyJar>false</useManifestOnlyJar> 
     <forkMode>always</forkMode> 
     <systemProperties> 
      <property> 
       <name>gwt.args</name> 
       <value>-out www-test</value> 
      </property> 
     </systemProperties> 
    </configuration> 
</plugin> 

Tendrá que definir las variables project.build.sourceDirectory y project.build.testSourceDirectory. Para mí son algo así como <project-name>/src/main/java y <project-name>/src/test/java.

También he tenido que añadir en una dependencia de gwt-dev:

<dependency> 
    <groupId>com.google.gwt</groupId> 
    <artifactId>gwt-dev</artifactId> 
    <version>2.4.0</version> 
    <scope>provided</scope> 
</dependency> 
5

que tenían la misma traza de la pila exacta y añadiendo

<dependency> 
    <groupId>com.google.gwt</groupId> 
    <artifactId>gwt-dev</artifactId> 
    <version>${gwtVersion}</version> 
    <scope>test</scope> 
</dependency> 

arreglado.

1

que obtendrá este mensaje de error si ha tenido éxito seguro ejecutar un GWTTest como una prueba unitaria. Como SureFire no sabe qué hacer con el código GWT, obtendrá este error.

Lo mejor es decirle segura de ignorar todas las pruebas con un patrón dado. Nombro todas mis pruebas de GWT "SomethingGwtTest.java". De esta forma, SureFire los ignora y el corredor de pruebas GWT del gwt-maven-plugin los recoge y los ejecuta de manera adecuada.

<plugin> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
     <excludes> 
      <exclude>**/*GwtTest.java</exclude> 
     </excludes> 
    </configuration> 
</plugin 
Cuestiones relacionadas