Google App Engine 数据存储区 - 持久查询
在测试环境中,通过查询访问 Google App Engine 数据存储区中的数据可能具有挑战性。尽管应用程序中的功能看似成功,但测试通常无法检索预期的数据。
造成这种差异的一个潜在原因在于数据存储查询的延迟一致性。与祖先查询不同,大多数查询需要一些时间来反映新添加的实体。 “应用所有待处理事务并保存数据存储”行表示测试框架在添加和查询实体后应用排队事务。
因此,在实体创建后立即运行的查询可能无法捕获这些事务待更改。为了解决这个问题,有几个选项:
这是使用延迟方法的测试代码的修改版本:
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中文网其他相关文章!