Heim >Backend-Entwicklung >Golang >Wie kann man Datenspeicherentitäten in Google App Engine-Tests zuverlässig abfragen?

Wie kann man Datenspeicherentitäten in Google App Engine-Tests zuverlässig abfragen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-07 08:49:13569Durchsuche

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

Abfragen von Datenspeicherentitäten in Google App Engine-Tests

Beim Testen von Code, der die Abfragefunktionen des Datenspeichers nutzt, können Entwickler trotz funktionaler Implementierungen darin auf Fehler stoßen die Anwendung. Diese Diskrepanz ergibt sich aus der schließlich konsistenten Natur der meisten Datenspeicherabfragen.

Im bereitgestellten Code wird eine Entität mithilfe der Put()-Methode in den Datenspeicher eingefügt, gefolgt von einer Abfrage, um sie mithilfe von GetAll() abzurufen. Allerdings gibt die Abfrage aufgrund der vom Datenspeicher auferlegten Latenzsimulation keine Ergebnisse zurück. Um dieses Problem zu lösen, können zwei Ansätze gewählt werden:

  1. Eine Verzögerung einführen: Führen Sie eine kurze Verzögerung (z. B. 100 ms) zwischen den Operationen Put() und GetAll() ein, um dies zu ermöglichen den Datenspeicher, um die eingefügte Entität zu verbreiten.
  2. Verwenden Sie Strongly Consistent Datenspeicher: Konfigurieren Sie die Testumgebung für die Verwendung eines stark konsistenten Datenspeichers, indem Sie die Option „StronglyConsistentDatastore“ im Testkontext auf „true“ setzen. Dadurch wird sichergestellt, dass Abfragen die kürzlich eingefügten Entitäten sofort widerspiegeln.

Beispiel (stark konsistenter Datenspeicher):

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

Durch die Verwendung beider Ansätze können Tests genau widerspiegeln das Verhalten von Abfragen in der Produktionsumgebung.

Das obige ist der detaillierte Inhalt vonWie kann man Datenspeicherentitäten in Google App Engine-Tests zuverlässig abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn