Maison > développement back-end > Golang > Comment puis-je simuler des fonctions externes dans Go pour les tests unitaires ?

Comment puis-je simuler des fonctions externes dans Go pour les tests unitaires ?

Mary-Kate Olsen
Libérer: 2025-01-02 18:57:37
original
250 Les gens l'ont consulté

How Can I Mock External Functions in Go for Unit Testing?

Se moquer des fonctions externes dans Go

Lorsque vous testez des fonctions qui reposent sur des packages externes, se moquer de ces fonctions externes peut être essentiel pour créer des fonctions isolées et fiables. essais. Prenons l'exemple suivant :

import x.y.z

func abc() {
    ...
    v := z.SomeFunc()
    ... 
}
Copier après la connexion

Pouvons-nous nous moquer de z.SomeFunc() pour tester unitairement abc() ?

Solution : refactorisation et moquerie

Oui, se moquer de z.SomeFunc() est possible avec une simple refactorisation. Introduisez une variable zSomeFunc de type fonction et initialisez-la avec z.SomeFunc. Ensuite, dans votre fonction qui appelle z.SomeFunc(), invoquez plutôt zSomeFunc() :

var zSomeFunc = z.SomeFunc

func abc() {
    // ...
    v := zSomeFunc()
    // ...
}
Copier après la connexion

Pendant les tests, attribuez une fonction personnalisée à zSomeFunc qui renvoie le comportement de test souhaité. Par exemple :

func TestAbc(t *testing.T) {
    // Save current function and restore at the end:
    old := zSomeFunc
    defer func() { zSomeFunc = old }()

    zSomeFunc = func() int {
        // This will be called, do whatever you want to,
        // return whatever you want to
        return 1
    }

    // Call the tested function
    abc()

    // Check expected behavior
}
Copier après la connexion

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:php.cn
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