我想用多个线程测试我的 JDO - DAO,以验证持久层是否知道同步。
这是我在 JUnit 测试中的一段代码
for(int i=0;i<10;i++) {
Runnable runnable = new UserAccountLifeCycle(..);
Thread thread = new Thread(runnable);
thread.start();
}
.. 其中 UserAccountLifeCycle 是一个扩展另一个业务层类并使用以下代码实现“Runnable”的类:
@Override
public void run() {
CategoryBusiness catBusiness = new CategoryBusiness(..);
Category cat1 = catBusiness.createEntity(..);
catBusiness.createEntities(..);
ContentBusiness conBusiness = new ContentBusiness(..);
conBusiness.createEntities(..);
}
如果我运行测试,我会得到:
线程“Thread-6”中的异常 java.lang.NullPointerException:没有为此线程注册 API 环境。在 com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppId(DatastoreApiHelper.java:86) 在 com.google.appengine.api.datastore.DatastoreAttributes.(DatastoreAttributes.java:28) 在 com.google.appengine.api。 datastore.AsyncDatastoreServiceImpl.getDatastoreAttributes(AsyncDatastoreServiceImpl.java:952) 在 com.google.appengine.api.datastore.AsyncDatastoreServiceImpl.getDatastoreType(AsyncDatastoreServiceImpl.java:944) 在 com.google.appengine.api.datastore.AsyncDatastoreServiceImpl.get(AsyncDatastoreServiceImpl. java:267) 在 com.google.appengine.api.datastore.DatastoreServiceImpl$1.runInternal(DatastoreServiceImpl.java:78) 在 com.google.appengine.api.datastore。
如果我运行此代码有效:
for(int i=0;i<10;i++) {
UserAccountLifeCycle lifeCycle = new UserAccountLifeCycle(i,testUser.getKey());
lifeCycle.run();
}
(我知道它不会将该方法作为线程运行,但它旨在证明 JUnit 测试已通过GAE 本地测试正确配置)