Maison >développement back-end >Golang >Comment puis-je simuler des fonctions importées dans Go pour des tests efficaces ?

Comment puis-je simuler des fonctions importées dans Go pour des tests efficaces ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-25 03:55:17297parcourir

How Can I Mock Imported Functions in Go for Effective Testing?

Mocking partiel pour les fonctions importées

Dans Go, tester une fonction qui s'appuie sur des fonctions importées à partir de packages externes peut être difficile. Prenons l'exemple suivant :

import x.y.z

func abc() {
    ...
    v := z.SomeFunc()
    ... 
}

Pouvons-nous nous moquer de z.SomeFunc() dans Go ?

Refactoring pour se moquer

Oui, avec un modification simple du code. En introduisant une variable de type fonction zSomeFunc et en l'initialisant avec z.SomeFunc, le code du package peut appeler cette variable au lieu de z.SomeFunc(). Cela nous permet de nous moquer de la fonction importée pendant les tests.

var zSomeFunc = z.SomeFunc

func abc() {
    ...
    v := zSomeFunc()
    ...
}

Mocking in Tests

Dans les tests, nous pouvons attribuer une fonction personnalisée à zSomeFunc qui se comporte comme nécessaire pour les tests.

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
}

En refactorisant le code, nous pouvons nous moquer des fonctions importées et tester plus efficacement leur impact sur notre code. Cette technique peut être particulièrement utile lors du test de dépendances tierces ou pour isoler des éléments spécifiques de fonctionnalités pour des tests ciblés.

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:
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