Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menyoal Entiti Datastore dengan Aman dalam Ujian Enjin Apl Google?

Bagaimana untuk Menyoal Entiti Datastore dengan Aman dalam Ujian Enjin Apl Google?

Patricia Arquette
Lepaskan: 2024-12-07 08:49:13
asal
558 orang telah melayarinya

How to Reliably Query Datastore Entities in Google App Engine Tests?

Menyiasat Entiti Datastore dalam Ujian Enjin Apl Google

Apabila menguji kod yang memanfaatkan keupayaan pertanyaan Datastore, pembangun mungkin menghadapi kegagalan walaupun pelaksanaan berfungsi dalam permohonan itu. Percanggahan ini timbul daripada sifat akhirnya konsisten kebanyakan pertanyaan Datastore.

Dalam kod yang disediakan, entiti dimasukkan ke dalam Datastore menggunakan kaedah Put(), diikuti dengan pertanyaan untuk mendapatkan semula menggunakan GetAll(). Walau bagaimanapun, pertanyaan tidak mengembalikan hasil disebabkan oleh simulasi kependaman yang dikenakan oleh Datastore. Untuk menyelesaikan masalah ini, dua pendekatan boleh diambil:

  1. Perkenalkan Kelewatan: Memperkenalkan kelewatan singkat (cth., 100ms) antara operasi Put() dan GetAll() untuk membenarkan Datastore untuk menyebarkan entiti yang dimasukkan.
  2. Gunakan dengan Kuat Consistent Datastore: Konfigurasikan persekitaran ujian untuk menggunakan Datastore yang sangat konsisten dengan menetapkan pilihan StronglyConsistentDatastore kepada benar dalam konteks ujian. Ini memastikan pertanyaan segera mencerminkan entiti yang dimasukkan baru-baru ini.

Contoh (Storngly Consistent Datastore):

import (
    "context"

    "cloud.google.com/go/datastore"
    "github.com/GoogleCloudPlatform/go-cloud-testing-gce"
)

func TestEntityQueryStronglyConsistent(t *testing.T) {
    ctx := context.Background()
    c, err := aetest.NewContext(ctx, aetest.Options{
        StronglyConsistentDatastore: true,
    })
    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)
    }

    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")
    }
}
Salin selepas log masuk

Dengan menggunakan mana-mana pendekatan, ujian boleh mencerminkan dengan tepat tingkah laku pertanyaan dalam persekitaran pengeluaran.

Atas ialah kandungan terperinci Bagaimana untuk Menyoal Entiti Datastore dengan Aman dalam Ujian Enjin Apl Google?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan