首页 >后端开发 >Golang >为什么我的 Google App Engine 数据存储区查询无法检索测试中新添加的实体?

为什么我的 Google App Engine 数据存储区查询无法检索测试中新添加的实体?

Patricia Arquette
Patricia Arquette原创
2024-12-06 13:20:11676浏览

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

Google App Engine 数据存储区 - 持久查询

在测试环境中,通过查询访问 Google App Engine 数据存储区中的数据可能具有挑战性。尽管应用程序中的功能看似成功,但测试通常无法检索预期的数据。

造成这种差异的一个潜在原因在于数据存储查询的延迟一致性。与祖先查询不同,大多数查询需要一些时间来反映新添加的实体。 “应用所有待处理事务并保存数据存储”行表示测试框架在添加和查询实体后应用排队事务。

因此,在实体创建后立即运行的查询可能无法捕获这些事务待更改。为了解决这个问题,有几个选项:

  • 引入延迟:在数据创建和后续查询之间引入短暂的延迟(例如 100 毫秒)以实现一致性。
  • 使用强一致性数据存储:启用测试配置期间的 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()

    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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn