2

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

4

2 に答える 2

2

App Engine Javaランタイムはスレッドをサポートしていますが、dev_appserverはサポートしていません。したがって、ローカル開発環境で同時実行性をテストした結果は、本番環境を代表するものではありません。

于 2012-04-11T04:37:20.120 に答える
0

ここで提案されている解決策を新しいスレッド内で試すことができます。

GAE 開発サーバー データストアへのデータのプリロードの受け入れテスト

于 2012-04-09T02:30:29.670 に答える