首頁 > 後端開發 > Golang > 如何在 Google App Engine 測試中可靠地查詢資料儲存實體?

如何在 Google App Engine 測試中可靠地查詢資料儲存實體?

Patricia Arquette
發布: 2024-12-07 08:49:13
原創
558 人瀏覽過

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

在Google App Engine 測試中查詢資料儲存區實體

在測試利用資料儲存區查詢功能的程式碼時,開發人員可能會遇到失敗,儘管其中實現了功能該應用程式。這種差異是由大多數資料儲存查詢的最終一致性性質所引起的。

在提供的程式碼中,使用 Put() 方法將實體插入資料儲存中,然後使用 GetAll() 進行查詢以檢索該實體。但是,由於資料儲存區施加的延遲模擬,查詢不會傳回任何結果。為了解決這個問題,可以採取兩種方法:

  1. 引入延遲:在Put() 和GetAll() 操作之間引入短暫的延遲(例如100ms),以允許資料儲存來傳播插入的實體。
  2. 使用強一致性資料儲存:透過在測試情境中將 StronglyConcientDatastore 選項設為 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板