Menguji Pertanyaan di Google App Engine Datastore
Dalam percubaan untuk menghalang entiti pendua dalam Datastore, anda menghadapi kesukaran menguji pertanyaan fungsi yang mesti memastikan keunikan. Walaupun fungsi berfungsi dengan betul dalam aplikasi, ujian berulang kali gagal.
Setelah menyiasat isu tersebut, telah ditentukan bahawa mengakses data stor data melalui pertanyaan tidak boleh dilakukan dalam konteks ujian. Ketidakupayaan ini berpunca daripada fakta bahawa transaksi Datastore tidak dilakukan serta-merta, mengakibatkan hasil pertanyaan yang tidak konsisten.
Dengan memperkenalkan kelewatan sekurang-kurangnya 100ms antara operasi datastore.Put() dan q.GetAll() dalam kes ujian disediakan, ujian akan lulus. Ini kerana kelewatan membolehkan transaksi dilakukan, memastikan ketekalan data.
Untuk memastikan konsistensi yang kukuh tanpa bergantung pada kelewatan, anda boleh menggunakan pilihan StronglyConsistentDatastore: true apabila membuat konteks ujian. Dengan berbuat demikian, semua pertanyaan akan sangat konsisten, menjamin bahawa data boleh diakses serta-merta selepas operasi tulis.
Berikut ialah versi terkini kes ujian anda menggunakan pilihan StronglyConsistentDatastore:
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") } }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menguji Pertanyaan Datastore dengan Amanah dalam Enjin Apl Google?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!