Rumah >pembangunan bahagian belakang >Golang >Mengapa Pertanyaan Google App Engine Datastore Saya Gagal Mendapatkan Entiti Yang Baru Ditambah dalam Ujian?

Mengapa Pertanyaan Google App Engine Datastore Saya Gagal Mendapatkan Entiti Yang Baru Ditambah dalam Ujian?

Patricia Arquette
Patricia Arquetteasal
2024-12-06 13:20:11671semak imbas

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

Google App Engine Datastore - Persistent Query

Dalam konteks ujian, mengakses data dalam Google App Engine Datastore melalui pertanyaan boleh menjadi mencabar. Walaupun kefungsian yang kelihatan berjaya dalam aplikasi, ujian selalunya gagal untuk mendapatkan semula data yang dijangkakan.

Satu sebab yang berpotensi untuk percanggahan ini terletak pada ketekalan pertanyaan stor data yang ditangguhkan. Tidak seperti pertanyaan nenek moyang, kebanyakan pertanyaan memerlukan sedikit masa untuk mencerminkan entiti yang baru ditambah. Baris "Menggunakan semua urus niaga yang belum selesai dan menyimpan stor data" menunjukkan bahawa rangka kerja ujian sedang menggunakan urus niaga beratur selepas entiti telah ditambahkan dan ditanya.

Akibatnya, pertanyaan dijalankan serta-merta selepas penciptaan entiti mungkin tidak menangkap ini perubahan yang belum selesai. Untuk menangani perkara ini, terdapat beberapa pilihan:

  • Memperkenalkan Kelewatan: Memperkenalkan kelewatan singkat (cth., 100ms) antara penciptaan data dan pertanyaan seterusnya untuk membolehkan ketekalan.
  • Gunakan Datastore Sangat Konsisten: Dayakan Pilihan StronglyConsistentDatastore semasa konfigurasi ujian untuk memaksa ketekalan data serta-merta.

Berikut ialah versi ubah suai kod ujian anda menggunakan pendekatan tertunda:

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")
    }
}

Dengan menggabungkan langkah-langkah ini, ujian boleh mencerminkan dengan tepat gelagat pertanyaan stor data dan memastikan entiti pendua tidak secara tidak sengaja dicipta.

Atas ialah kandungan terperinci Mengapa Pertanyaan Google App Engine Datastore Saya Gagal Mendapatkan Entiti Yang Baru Ditambah dalam Ujian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn