Maison >développement back-end >Golang >Comment puis-je tester de manière fiable les requêtes de banque de données dans Google App Engine ?
Test des requêtes sur la banque de données Google App Engine
Pour tenter d'éviter les entités en double dans la banque de données, vous rencontrez des difficultés pour tester une requête fonction qui doit garantir l’unicité. Bien que la fonction fonctionne correctement dans l'application, les tests échouent à plusieurs reprises.
Après avoir étudié le problème, il a été déterminé que l'accès aux données de la banque de données via des requêtes n'est pas possible dans le contexte des tests. Cette incapacité vient du fait que les transactions Datastore ne sont pas validées immédiatement, ce qui entraîne des résultats de requête incohérents.
En introduisant un délai d'au moins 100 ms entre les opérations datastore.Put() et q.GetAll() dans le cas de test fourni, les tests réussiront. En effet, le délai permet de valider la transaction, garantissant ainsi la cohérence des données.
Pour garantir une forte cohérence sans compter sur des retards, vous pouvez utiliser l'option StronglyConsistentDatastore: true lors de la création du contexte de test. Ce faisant, toutes les requêtes seront fortement cohérentes, garantissant que les données sont immédiatement accessibles après les opérations d'écriture.
Voici une version mise à jour de votre scénario de test utilisant l'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") } }
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!