使用强一致性数据存储创建上下文

在使用 Google App Engine 的测试库进行测试时,最终一致性的挑战将以与生产相同的方式呈现。因此,为了将某些内容写入数据存储区以测试检索,你必须创建一个强烈一致的上下文。

type Foo struct {
    Bar string
}

func TestDataStore(t *testing.T) {
    inst, err := aetest.NewInstance(
        &aetest.Options{StronglyConsistentDatastore: true})
    if err != nil {
        t.Fatal(err)
    }
    defer inst.Close()

    req, err := inst.NewRequest("GET", "/", nil)
    if err != nil {
        t.Fatal(err)
    }

    ctx := appengine.NewContext(req)

    foo := &Foo{ Bar: "baz" } 
    
    key, err := key := datastore.NewIncompleteKey(context, "Foo", nil)
    if _, err := datastore.Put(context, key, details); err != nil {
        t.Fatalf(err)
    }

    query := datastore.NewQuery("Foo").Filter("Bar =", "baz")
    for iterator := query.Run(ctx); ; {
        item := &Foo{}
        err := iterator.Next(item)
        if err == datastore.Done {
            t.Fatalf("No results")
        } 
        if err != nil {
            t.Fatal(err)
        } 
        if foo.Bar != item.Bar {
            t.Fatal("Wrong result returned.")
        }
    }       
}