永続化レイヤーが同期を認識しているかどうかを確認するために、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. com.google.appengine.api.datastore.AsyncDatastoreServiceImpl.getDatastoreType(AsyncDatastoreServiceImpl.java:944) の datastore.AsyncDatastoreServiceImpl.getDatastoreAttributes(AsyncDatastoreServiceImpl.java:952) 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 ローカル テストで正しく構成されていることの証明として意図されています)