Maison >développement back-end >Golang >Pourquoi mes requêtes de banque de données Google App Engine ne parviennent-elles pas à récupérer les entités nouvellement ajoutées dans les tests ?
Google App Engine Datastore - Requêtes persistantes
Dans le contexte des tests, accéder aux données de la banque de données de Google App Engine via des requêtes peut s'avérer difficile. Malgré une fonctionnalité apparemment réussie de l'application, les tests ne parviennent souvent pas à récupérer les données attendues.
L'une des raisons potentielles de cet écart réside dans le retard de cohérence des requêtes de la banque de données. Contrairement aux requêtes ancêtres, la plupart des requêtes nécessitent un certain temps pour refléter les entités nouvellement ajoutées. La ligne « Appliquer toutes les transactions en attente et enregistrer la banque de données » indique que l'infrastructure de test applique les transactions en file d'attente après que l'entité a été ajoutée et interrogée.
Par conséquent, les requêtes exécutées immédiatement après la création de l'entité peuvent ne pas capturer ces transactions. changements en attente. Pour résoudre ce problème, il existe plusieurs options :
Voici une version modifiée de votre code de test utilisant l'approche différée :
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") } }
En incorporant ces mesures, les tests peuvent reflètent avec précision le comportement des requêtes de la banque de données et garantissent que des entités en double ne sont pas créées par inadvertance.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!