Maison > développement back-end > Golang > le corps du texte

Comment tester les fonctions non exportées dans Go ?

Mary-Kate Olsen
Libérer: 2024-10-26 05:47:02
original
873 Les gens l'ont consulté

How Can You Test Unexported Functions in Go?

Appel de fonctions de test à partir de fichiers Go non-test

Dans Go, les fonctions de test ne doivent pas être appelées depuis le code lui-même. Au lieu de cela, les tests unitaires sont destinés à être exécutés à l'aide de la commande go test commande.

Tests en boîte noire et blanche

Go prend en charge deux types de tests unitaires : la boîte noire et la boîte blanche.

Tests en boîte noire teste les fonctions exportées depuis l'extérieur du package, en simulant la manière dont les packages externes interagiront avec lui.

Tests en boîte blanche teste les fonctions non exportées depuis le package lui-même.

Exemple

Considérons un package appelé example avec une fonction exportée Sum et une fonction utilitaire non exportée add.

<code class="go">// example.go
package example

func Sum(nums ...int) int {
    sum := 0
    for _, num := range nums {
        sum = add(sum, num)
    }
    return sum
}

func add(a, b int) int {
    return a + b
}</code>
Copier après la connexion

Test en boîte noire (dans example_test.go) :

<code class="go">package example_test

import (
    "testing"

    "example"
)

func TestSum(t *testing.T) {
    tests := []struct {
        nums []int
        sum  int
    }{
        {nums: []int{1, 2, 3}, sum: 6},
        {nums: []int{2, 3, 4}, sum: 9},
    }

    for _, test := range tests {
        s := example.Sum(test.nums...)
        if s != test.sum {
            t.FailNow()
        }
    }
}</code>
Copier après la connexion

Tests en boîte blanche (dans example_internal_test.go) :

<code class="go">package example

import "testing"

func TestAdd(t *testing.T) {
    tests := []struct {
        a   int
        b   int
        sum int
    }{
        {a: 1, b: 2, sum: 3},
        {a: 3, b: 4, sum: 7},
    }

    for _, test := range tests {
        s := add(test.a, test.b)
        if s != test.sum {
            t.FailNow()
        }
    }
}</code>
Copier après la connexion

En résumé, les tests unitaires doivent être exécutés à l'aide de la commande go test, et jamais appelé directement depuis le code. Les tests en boîte noire et blanche offrent différents niveaux d'accès à l'implémentation du package à des fins de test.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!