首页 > 后端开发 > Golang > 如何在 Google App Engine 中可靠地测试数据存储查询?

如何在 Google App Engine 中可靠地测试数据存储查询?

Susan Sarandon
发布: 2024-12-07 15:46:15
原创
654 人浏览过

How Can I Reliably Test Datastore Queries in Google App Engine?

在 Google App Engine 数据存储区上测试查询

为了防止数据存储区中出现重复实体,您在测试查询时遇到了困难必须保证唯一性的函数。尽管该函数在应用程序中正确执行,但测试反复失败。

在调查该问题后,已确定在测试上下文中不可能通过查询访问数据存储区数据。这种无法解决的原因是 Datastore 事务没有立即提交,从而导致查询结果不一致。

通过在 datastore.Put() 和 q.GetAll() 操作之间引入至少 100ms 的延迟提供了测试用例,测试就会通过。这是因为延迟允许事务提交,确保数据一致性。

要在不依赖延迟的情况下确保强一致性,可以在创建测试上下文时使用 StronglyConcientDatastore: true 选项。通过这样做,所有查询都将保持高度一致,从而保证在写入操作后可以立即访问数据。

这是使用 StronglyConcientDatastore 选项的测试用例的更新版本:

type Entity struct {
    Value string
}

func TestEntityQuery(t *testing.T) {
    c, err := aetest.NewContext(nil)
    if err != nil {
        t.Fatal(err)
    }
    defer c.Close()

    c.StronglyConsistentDatastore = true

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