Heim >Backend-Entwicklung >Golang >Warum können meine Google App Engine-Datenspeicherabfragen neu hinzugefügte Entitäten in Tests nicht abrufen?

Warum können meine Google App Engine-Datenspeicherabfragen neu hinzugefügte Entitäten in Tests nicht abrufen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-06 13:20:11671Durchsuche

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

Google App Engine Datastore – Persistente Abfragen

Im Kontext von Tests kann der Zugriff auf Daten im Google App Engine Datastore über Abfragen eine Herausforderung darstellen. Trotz scheinbar erfolgreicher Funktionalität in der Anwendung gelingt es Tests häufig nicht, die erwarteten Daten abzurufen.

Ein möglicher Grund für diese Diskrepanz liegt in der verzögerten Konsistenz von Datenspeicherabfragen. Im Gegensatz zu Vorgängerabfragen benötigen die meisten Abfragen einige Zeit, um neu hinzugefügte Entitäten widerzuspiegeln. Die Zeile „Alle ausstehenden Transaktionen anwenden und den Datenspeicher speichern“ zeigt an, dass das Test-Framework in der Warteschlange befindliche Transaktionen anwendet, nachdem die Entität hinzugefügt und abgefragt wurde.

Daher werden diese bei Abfragen, die unmittelbar nach der Entitätserstellung ausgeführt werden, möglicherweise nicht erfasst ausstehende Änderungen. Um dies zu beheben, gibt es mehrere Optionen:

  • Eine Verzögerung einführen:Führen Sie eine kurze Verzögerung (z. B. 100 ms) zwischen der Datenerstellung und der nachfolgenden Abfrage ein, um Konsistenz zu gewährleisten.
  • Strongly Consistent Datastore verwenden: Aktivieren Sie die Option StronglyConsistentDatastore während der Testkonfiguration, um eine sofortige Datenkonsistenz zu erzwingen.

Hier ist eine modifizierte Version Ihres Testcodes mit dem verzögerten Ansatz:

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

Durch die Einbeziehung dieser Maßnahmen können Tests eine genaue Wiedergabe ermöglichen das Verhalten von Datenspeicherabfragen und stellen Sie sicher, dass nicht versehentlich doppelte Entitäten erstellt werden.

Das obige ist der detaillierte Inhalt vonWarum können meine Google App Engine-Datenspeicherabfragen neu hinzugefügte Entitäten in Tests nicht abrufen?. 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