We have no success to implement gae junit test.
We use spring 2.5.6  and  follow the  
http://code.google.com/appengine/docs/java/howto/unittesting.html
.

public class BaseTestCase extends
AbstractDependencyInjectionSpringContextTests {
         @Override
            public void onSetUp() throws Exception {
                ApiProxy.setEnvironmentForCurrentThread(new
TestEnvironment());
                ApiProxy.setDelegate(new ApiProxyLocalImpl(new File("D:/work/
drp/src/drp/war")){});
                super.onSetUp();
            }
            @Override
            public void onTearDown() throws Exception {
                super.onTearDown();
                // not strictly necessary to null these out but there's no
harm either
                ApiProxy.setDelegate(null);
                ApiProxy.setEnvironmentForCurrentThread(null);
            }
            public String[] getConfigLocations() {
                   String[] configLocations = { "file:war/WEB-INF/
applicationContext.xml" };
                   return configLocations;
            }
}
but when run junit test. the exception is throw
Failed to load from the backing store, D:\work\drp\src\drp\war\WEB-INF
\appengine-generated\local_db.bin
java.io.InvalidClassException:
com.google.appengine.api.datastore.dev.LocalDatastoreService$Profile;
local class incompatible: stream classdesc serialVersionUID =
-6517584213397327068, local class serialVersionUID =
-5383535353082918279
        at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:562)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:
1583)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:
1496)
        at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:
1732)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
        at java.util.HashMap.readObject(HashMap.java:1030)
        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 java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:
974)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:
1849)
        at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:
1753)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:
1947)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:
1871)
        at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:
1753)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
        at
com.google.appengine.api.datastore.dev.LocalDatastoreService.load(LocalDatastoreService.java:
949)
        at
com.google.appengine.api.datastore.dev.LocalDatastoreService.start_(LocalDatastoreService.java:
281)
        at com.google.appengine.api.datastore.dev.LocalDatastoreService.access
$300(LocalDatastoreService.java:90)
        at com.google.appengine.api.datastore.dev.LocalDatastoreService
$1.run(LocalDatastoreService.java:273)
        at java.security.AccessController.doPrivileged(Native Method)
        at
com.google.appengine.api.datastore.dev.LocalDatastoreService.start(LocalDatastoreService.java:
271)
        at
com.google.appengine.tools.development.ApiProxyLocalImpl.startServices(ApiProxyLocalImpl.java:
373)
        at com.google.appengine.tools.development.ApiProxyLocalImpl.access
$500(ApiProxyLocalImpl.java:42)
        at com.google.appengine.tools.development.ApiProxyLocalImpl
$2.run(ApiProxyLocalImpl.java:356)
        at com.google.appengine.tools.development.ApiProxyLocalImpl
$2.run(ApiProxyLocalImpl.java:354)
        at java.security.AccessController.doPrivileged(Native Method)
        at
com.google.appengine.tools.development.ApiProxyLocalImpl.getService(ApiProxyLocalImpl.java:
353)
        at
com.google.appengine.tools.development.ApiProxyLocalImpl.makeSyncCall(ApiProxyLocalImpl.java:
100)
        at com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:83)
        at
com.google.appengine.api.datastore.DatastoreApiHelper.makeSyncCall(DatastoreApiHelper.java:
52)
        at
com.google.appengine.api.datastore.DatastoreServiceImpl.beginTransaction(DatastoreServiceImpl.java:
516)
        at
org.datanucleus.store.appengine.RuntimeExceptionWrappingDatastoreService.beginTransaction(RuntimeExceptionWrappingDatastoreService.java:
209)
        at
org.datanucleus.store.appengine.DatastoreXAResource.start(DatastoreXAResource.java:
63)
        at
org.datanucleus.transaction.Transaction.enlistResource(Transaction.java:
425)
        at
org.datanucleus.ConnectionManagerImpl.enlistResource(ConnectionManagerImpl.java:
345)
        at
org.datanucleus.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:
212)
        at
org.datanucleus.store.appengine.DatastoreConnectionFactoryImpl.getConnection(DatastoreConnectionFactoryImpl.java:
109)
        at
org.datanucleus.store.AbstractStoreManager.getConnection(AbstractStoreManager.java:
288)
        at
org.datanucleus.store.appengine.query.DatastoreQuery.executeQuery(DatastoreQuery.java:
236)
        at
org.datanucleus.store.appengine.query.DatastoreQuery.performExecute(DatastoreQuery.java:
228)
        at
org.datanucleus.store.appengine.query.JDOQLQuery.performExecute(JDOQLQuery.java:
85)
        at org.datanucleus.store.query.Query.executeQuery(Query.java:1489)
        at org.datanucleus.store.query.Query.executeWithMap(Query.java:1398)
        at org.datanucleus.jdo.JDOQuery.executeWithMap(JDOQuery.java:334)
        at com.datong.drp.dao.impl.PurchaseOrderDAOImpl
$1.doInJdo(PurchaseOrderDAOImpl.java:82)
        at org.springframework.orm.jdo.JdoTemplate.execute(JdoTemplate.java:
204)
        at org.springframework.orm.jdo.JdoTemplate.execute(JdoTemplate.java:
174)
        at
com.datong.drp.dao.impl.PurchaseOrderDAOImpl.queryPurchaseOrder(PurchaseOrderDAOImpl.java:
34)
        at
com.datong.drp.service.impl.PurchaseServiceImpl.queryPurchaseOrder(PurchaseServiceImpl.java:
40)
        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.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:
307)
        at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:
182)
        at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:
149)
        at
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:
106)
        at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:
171)
        at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:
204)
        at $Proxy1.queryPurchaseOrder(Unknown Source)
        at
com.datong.drp.service.PurchaseServiceTest.testQueryPurchaseOrder(PurchaseServiceTest.java:
43)
        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 junit.framework.TestCase.runTest(TestCase.java:168)
        at junit.framework.TestCase.runBare(TestCase.java:134)
        at
org.springframework.test.ConditionalTestCase.runBare(ConditionalTestCase.java:
76)
        at junit.framework.TestResult$1.protect(TestResult.java:110)
        at junit.framework.TestResult.runProtected(TestResult.java:128)
        at junit.framework.TestResult.run(TestResult.java:113)
        at junit.framework.TestCase.run(TestCase.java:124)
        at junit.framework.TestSuite.runTest(TestSuite.java:232)
        at junit.framework.TestSuite.run(TestSuite.java:227)
        at
org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:
83)
        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)


On 2月5日, 下午10時54分, Chau Huynh <[email protected]> wrote:
> http://code.google.com/appengine/docs/java/howto/unittesting.html#Wri...
> I wonder if your team members can share same test case
> and "local_db.bin" in each of your environment can have similar "record".
> I just read it, so please try and advise if it work. Thanks
> -Chau

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.

Reply via email to