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.