Maison > développement back-end > Golang > Comment créer des tests unitaires pour le stockage de données en mémoire ?

Comment créer des tests unitaires pour le stockage de données en mémoire ?

WBOY
Libérer: 2024-02-09 10:12:19
avant
715 Les gens l'ont consulté

Comment créer des tests unitaires pour le stockage de données en mémoire ?

L'éditeur PHP Xiaoxin vous présentera comment créer des tests unitaires pour le stockage de données en mémoire. Pendant le processus de développement, les tests unitaires sont l’un des moyens importants pour garantir la qualité du code et l’exactitude fonctionnelle. Pour le stockage des données en mémoire, nous pouvons utiliser des frameworks de test tels que PHPUnit pour écrire les cas de test correspondants. Tout d’abord, nous devons créer une classe de test, puis écrire la logique de test appropriée dans la méthode de test. Dans chaque méthode de test, nous pouvons utiliser des assertions pour vérifier que les résultats attendus correspondent aux résultats réels. Grâce à de tels tests unitaires, nous pouvons découvrir et résoudre les problèmes potentiels à temps et améliorer la stabilité et la fiabilité du code.

Contenu de la question

Je souhaite créer une API de repos simple. J'ai décidé de créer mon propre magasin de données en mémoire pour implémenter une telle interface :

type datastore interface {
    add(*element) error
    get(elementid) (*element, error)
    update(*element) error
    delete(elementid) error
    getall() []*element
}
Copier après la connexion
type datastore struct {
    mu     sync.mutex
    bucket map[string]*element
}
Copier après la connexion
func newdb() *datastore {
    return &datastore {
        bucket: make(map[string]*element),
    }
}
Copier après la connexion

Comment doit-il être testé unitairement ?

Certains des tests que j'ai réussi à créer ressemblent à ceci :

func testgetalltodotasks(t *testing.t) {
    ts := newdb()
    var elem = &element{fielda : "a" , fieldb : "b"}
    ts.create(elem)

    want := []*element{elem}

    if got := ts.getall(); !reflect.deepequal(got, want) {
        t.errorf("got %v wanted %v", got, want)
    }
}
Copier après la connexion

Mais quand je veux tester d'autres méthodes (comme update), je me rends compte que je dois d'abord utiliser create puis update, comme ceci :

func TestUpdateTODOTasks(t *testing.T) {
    ts := NewDB()
    var elem = &Element{fieldA : "A" , fieldB : "B"}
    ts.Create(elem)
    if err != nil {
        t.Errorf("=> failed to create: %v", err.Error())
    }
    var updated_elem = &Element{fieldA : "A-updated" , fieldB : "B"}

    err = ts.Update(updated_elem )

    if err != nil {
        t.Errorf("=> failed to update: %v", err.Error())
    }

}
Copier après la connexion

Solution de contournement

Vous pouvez initialiser le mappage sous-jacent en fonction des détails d'implémentation indiquant que le stockage utilise le mappage en coulisse.

En général, vous pouvez vraiment bénéficier des tests comme vous le décrivez. Par conséquent, utilisez l’API définie pour amorcer le stockage à des fins de test. Cela rapproche vos tests de la façon dont les clients utilisent votre code. Pas besoin de modifier manuellement l'état sous-jacent. J'ai vu beaucoup de tests effectués de cette façon, mais ils deviennent généralement impossibles à maintenir et instables.

Ne vous attardez pas trop sur le fait qu’un test unitaire doit vérifier une fonction. En fait, il s'agit davantage de tester de petites parties complètes et autonomes du logiciel, il n'est donc pas nécessaire qu'il s'agisse d'une seule fonctionnalité.

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!

source:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal