"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment tester les fonctions non exportées dans Go ?

Comment tester les fonctions non exportées dans Go ?

Publié le 2024-11-06
Parcourir:807

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 à partir du 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 .

Tests en boîte noire et blanche

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

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

Tests en boîte blanche teste les fonctions non exportées à partir du 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.

// 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
}

Tests en boîte noire (dans example_test.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()
        }
    }
}

Tests en boîte blanche (dans example_internal_test.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()
        }
    }
}

En résumé, les tests unitaires doivent être exécutés à l'aide de la commande go test et ne jamais être appelés 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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3