ホームページ >バックエンド開発 >Golang >Google App Engine データストア クエリがテストで新しく追加されたエンティティを取得できないのはなぜですか?

Google App Engine データストア クエリがテストで新しく追加されたエンティティを取得できないのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-06 13:20:11671ブラウズ

Why Do My Google App Engine Datastore Queries Fail to Retrieve Newly Added Entities in Tests?

Google App Engine データストア - 永続クエリ

テストのコンテキストでは、クエリを介して Google App Engine のデータストア内のデータにアクセスするのは困難な場合があります。アプリケーションの機能が一見成功しているように見えても、テストでは予期したデータの取得に失敗することがよくあります。

この不一致の潜在的な理由の 1 つは、データストア クエリの一貫性の遅延にあります。祖先クエリとは異なり、ほとんどのクエリでは、新しく追加されたエンティティを反映するまでに時間がかかります。 「すべての保留中のトランザクションを適用してデータストアを保存する」という行は、エンティティが追加されてクエリが実行された後に、テスト フレームワークがキューに入れられたトランザクションを適用していることを示しています。

その結果、エンティティの作成直後に実行されるクエリでは、これらのトランザクションがキャプチャされない可能性があります。保留中の変更。これに対処するには、いくつかのオプションがあります:

  • 遅延を導入する: データの作成とその後のクエリの間に短い遅延 (例: 100ms) を導入して、一貫性を確保します。
  • Use Strongly Consistent Datastore: 次の手順で StronglyConsistentDatastore オプションを有効にします。即時データの一貫性を強制するためのテスト構成。

遅延アプローチを使用したテスト コードの修正バージョンは次のとおりです。

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。