ホームページ > バックエンド開発 > Golang > Google App Engine テストでデータストア エンティティを確実にクエリする方法

Google App Engine テストでデータストア エンティティを確実にクエリする方法

Patricia Arquette
リリース: 2024-12-07 08:49:13
オリジナル
557 人が閲覧しました

How to Reliably Query Datastore Entities in Google App Engine Tests?

Google App Engine テストでのデータストア エンティティのクエリ

データストアのクエリ機能を利用するコードをテストする場合、開発者はデータストア内の機能実装にもかかわらずエラーが発生する可能性があります。アプリケーション。この不一致は、ほとんどのデータストア クエリの結果整合性の性質から発生します。

提供されたコードでは、Put() メソッドを使用してエンティティがデータストアに挿入され、続いて GetAll() を使用してエンティティを取得するクエリが実行されます。ただし、データストアによって課される遅延シミュレーションのため、クエリは結果を返しません。これを解決するには、2 つのアプローチを取ることができます:

  1. 遅延を導入する: Put() と GetAll() 操作の間に短い遅延 (例: 100ms) を導入して、挿入されたエンティティを反映するデータストア。
  2. ​​
  3. 強整合性を使用データストア: テスト コンテキストで StronglyConsistentDatastore オプションを true に設定して、強整合性データストアを使用するようにテスト環境を構成します。これにより、最近挿入されたエンティティがクエリに即座に反映されます。

例 (強整合性データストア):

import (
    "context"

    "cloud.google.com/go/datastore"
    "github.com/GoogleCloudPlatform/go-cloud-testing-gce"
)

func TestEntityQueryStronglyConsistent(t *testing.T) {
    ctx := context.Background()
    c, err := aetest.NewContext(ctx, aetest.Options{
        StronglyConsistentDatastore: true,
    })
    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)
    }

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート