Testen von Abfragen im Google App Engine-Datenspeicher
Um doppelte Entitäten im Datenspeicher zu verhindern, stoßen Sie beim Testen einer Abfrage auf Schwierigkeiten Funktion, die Einzigartigkeit gewährleisten muss. Obwohl die Funktion in der Anwendung korrekt ausgeführt wird, schlagen Tests wiederholt fehl.
Bei der Untersuchung des Problems wurde festgestellt, dass der Zugriff auf Datenspeicherdaten über Abfragen im Testkontext nicht möglich ist. Diese Unfähigkeit ist auf die Tatsache zurückzuführen, dass Datastore-Transaktionen nicht sofort festgeschrieben werden, was zu inkonsistenten Abfrageergebnissen führt.
Durch die Einführung einer Verzögerung von mindestens 100 ms zwischen den Vorgängen datastore.Put() und q.GetAll() im Wenn der Testfall bereitgestellt wird, werden die Tests bestanden. Dies liegt daran, dass die Verzögerung das Festschreiben der Transaktion ermöglicht und so die Datenkonsistenz gewährleistet.
Um eine starke Konsistenz sicherzustellen, ohne auf Verzögerungen angewiesen zu sein, können Sie beim Erstellen des Testkontexts die Option StronglyConsistentDatastore: true verwenden. Auf diese Weise sind alle Abfragen stark konsistent und stellen sicher, dass nach Schreibvorgängen sofort auf Daten zugegriffen werden kann.
Hier ist eine aktualisierte Version Ihres Testfalls mit der Option „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") } }
Das obige ist der detaillierte Inhalt vonWie kann ich Datenspeicherabfragen in Google App Engine zuverlässig testen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!