test eclipse google-app-engine junit

test - eclipse autocomplete



Usando JUnit con App Engine y Eclipse (2)

Tengo problemas para configurar JUnit con App Engine en Eclipse. Tengo JUnit configurado correctamente, es decir, puedo ejecutar pruebas que no involucran el almacén de datos u otros servicios. Sin embargo, cuando intento usar el almacén de datos en mis pruebas, fallan. El código que estoy intentando en este momento es del sitio de App Engine (ver más abajo):

http://code.google.com/appengine/docs/java/tools/localunittesting.html#Running_Tests

Hasta ahora he agregado el JAR externo (utilizando Eclipse) appengine-testing.jar. Pero cuando ejecuto las pruebas obtengo la excepción a continuación. Por lo tanto, claramente no entiendo las instrucciones para habilitar los servicios de la página web mencionada anteriormente. ¿Puede alguien aclarar los pasos necesarios para que los servicios de App Engine estén disponibles en Eclipse?

java.lang.NoClassDefFoundError: com/google/appengine/api/datastore/dev/LocalDatastoreService at com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig.tearDown(LocalDatastoreServiceTestConfig.java:138) at com.google.appengine.tools.development.testing.LocalServiceTestHelper.tearDown(LocalServiceTestHelper.java:254) at com.cooperconrad.server.MemberTest.tearDown(MemberTest.java:28) 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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:37) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41) at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) at org.junit.runners.ParentRunner.run(ParentRunner.java:220) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 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.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: java.lang.ClassNotFoundException: com.google.appengine.api.datastore.dev.LocalDatastoreService at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) ... 25 more

Aquí está el código real (bastante copiado del sitio):

package com.example; import static org.junit.Assert.*; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.google.appengine.api.datastore.DatastoreService; import com.google.appengine.api.datastore.DatastoreServiceFactory; import com.google.appengine.api.datastore.Entity; import com.google.appengine.api.datastore.Query; import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig; import com.google.appengine.tools.development.testing.LocalServiceTestHelper; public class MemberTest { private final LocalServiceTestHelper helper = new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()); @Before public void setUp() { helper.setUp(); } @After public void tearDown() { helper.tearDown(); } // run this test twice to prove we''re not leaking any state across tests private void doTest() { DatastoreService ds = DatastoreServiceFactory.getDatastoreService(); assertEquals(0, ds.prepare(new Query("yam")).countEntities()); ds.put(new Entity("yam")); ds.put(new Entity("yam")); assertEquals(2, ds.prepare(new Query("yam")).countEntities()); } @Test public void testInsert1() { doTest(); } @Test public void testInsert2() { doTest(); } @Test public void foo() { assertEquals(4, 2 + 2); } }


En Eclipse, ¿has agregado todos los frascos mencionados here ? Necesitas unos cuantos tarros más que solo appengine-testing.jar.

Sin embargo, si sus pruebas o código bajo prueba tienen estas dependencias, necesitará algunos JAR más en su ruta de clase de prueba: $ {SDK_ROOT} /lib/impl/appengine-api.jar, $ {SDK_ROOT} / lib / impl / appengine -api-labs.jar, y $ {SDK_ROOT} /lib/impl/appengine-api-stubs.jar. Estos JAR hacen que las API de tiempo de ejecución y las implementaciones locales de esas API estén disponibles para sus pruebas.


La respuesta de Peter es correcta: necesitas estas bibliotecas:

appengine-api.jar appengine-api-labs.jar appengine-api-stubs.jar appengine-tools-api.jar

Es probable que ya tengas el primero y solo necesites los últimos tres.

Si está utilizando Maven, puede agregar estas dependencias a pom.xml :

<dependency> <groupId>com.google.appengine</groupId> <artifactId>appengine-api-labs</artifactId> <version>1.9.60</version> <scope>test</scope> </dependency> <dependency> <groupId>com.google.appengine</groupId> <artifactId>appengine-api-stubs</artifactId> <version>1.9.60</version> <scope>test</scope> </dependency> <dependency> <groupId>com.google.appengine</groupId> <artifactId>appengine-tools-sdk</artifactId> <version>1.9.60</version> <scope>test</scope> </dependency>