Google App Engine データストア - 永続クエリ
テストのコンテキストでは、クエリを介して Google App Engine のデータストア内のデータにアクセスするのは困難な場合があります。アプリケーションの機能が一見成功しているように見えても、テストでは予期したデータの取得に失敗することがよくあります。
この不一致の潜在的な理由の 1 つは、データストア クエリの一貫性の遅延にあります。祖先クエリとは異なり、ほとんどのクエリでは、新しく追加されたエンティティを反映するまでに時間がかかります。 「すべての保留中のトランザクションを適用してデータストアを保存する」という行は、エンティティが追加されてクエリが実行された後に、テスト フレームワークがキューに入れられたトランザクションを適用していることを示しています。
その結果、エンティティの作成直後に実行されるクエリでは、これらのトランザクションがキャプチャされない可能性があります。保留中の変更。これに対処するには、いくつかのオプションがあります:
遅延アプローチを使用したテスト コードの修正バージョンは次のとおりです。
type Entity struct { Value string } func TestEntityQuery(t *testing.T) { c, err := aetest.NewContext(nil) if err != nil { t.Fatal(err) } defer c.Close() key := datastore.NewIncompleteKey(c, "Entity", nil) key, err = datastore.Put(c, key, &Entity{Value: "test"}) if err != nil { t.Fatal(err) } // Delay to allow for consistency time.Sleep(100 * time.Millisecond) q := datastore.NewQuery("Entity").Filter("Value =", "test") var entities []Entity keys, err := q.GetAll(c, &entities) if err != nil { t.Fatal(err) } if len(keys) == 0 { t.Error("No keys found in query") } if len(entities) == 0 { t.Error("No entities found in query") } }
これらの対策を組み込むことで、テストは正確にデータを反映できます。データストア クエリの動作を確認し、重複したエンティティが誤って作成されないようにします。
以上がGoogle App Engine データストア クエリがテストで新しく追加されたエンティティを取得できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。