Maison > développement back-end > Golang > Comment interroger de manière fiable les entités de banque de données dans les tests Google App Engine ?

Comment interroger de manière fiable les entités de banque de données dans les tests Google App Engine ?

Patricia Arquette
Libérer: 2024-12-07 08:49:13
original
563 Les gens l'ont consulté

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

Interrogation des entités de la banque de données dans les tests Google App Engine

Lors du test du code qui exploite les capacités de requête de la banque de données, les développeurs peuvent rencontrer des échecs malgré les implémentations fonctionnelles au sein la demande. Cet écart résulte de la nature finalement cohérente de la plupart des requêtes du Datastore.

Dans le code fourni, une entité est insérée dans le Datastore à l'aide de la méthode Put(), suivie d'une requête pour la récupérer à l'aide de GetAll(). Cependant, la requête ne renvoie aucun résultat en raison de la simulation de latence imposée par le Datastore. Pour résoudre ce problème, deux approches peuvent être adoptées :

  1. Introduire un délai : introduire un court délai (par exemple, 100 ms) entre les opérations Put() et GetAll() pour permettre le Datastore pour propager l'entité insérée.
  2. Utiliser Fortement Cohérent Datastore : configurez l'environnement de test pour utiliser une banque de données fortement cohérente en définissant l'option StronglyConsistentDatastore sur true dans le contexte de test. Cela garantit que les requêtes reflètent immédiatement les entités récemment insérées.

Exemple (banque de données fortement cohérente) :

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")
    }
}
Copier après la connexion

En utilisant l'une ou l'autre approche, les tests peuvent refléter avec précision le comportement des requêtes dans l'environnement de production.

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal