首页 > 后端开发 > 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板