Maison  >  Article  >  développement back-end  >  Pouvez-vous appeler des fonctions de test Go à partir de fichiers non-test ?

Pouvez-vous appeler des fonctions de test Go à partir de fichiers non-test ?

DDD
DDDoriginal
2024-10-25 15:55:02126parcourir

Can You Call Go Test Functions From Non-Test Files?

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

Dans Go, les tests reposent sur des conventions et des méthodologies spécifiques. L'une de ces conventions est que les tests doivent être séparés dans leurs propres fichiers de test, qui doivent se terminer par le suffixe "_test.go".

Les fonctions de test peuvent-elles être appelées à partir de fichiers non-test ?

Réponse courte : Non.

Contrairement à votre question, les fonctions de test ne peuvent pas être directement invoquées à partir de fichiers Go non-test. Cette séparation garantit que les tests restent distincts et indépendants du code testé.

Modèles de test dans Go

Go utilise principalement deux types de tests unitaires :

  • Tests en boîte noire : Évaluation des fonctions publiques exportées, imitant la manière dont les appelants externes interagiraient avec elles.
  • Tests en boîte blanche : Évaluation des fonctions privées , fonctions non exportées au sein du même package, fournissant des informations plus approfondies sur les opérations internes.

Exemple

Considérez l'"exemple" de package suivant avec une "Somme" exportée. fonction et une fonction "ajouter" non exportée :

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
}

Test en boîte noire (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()
        }
    }
}

Test en boîte blanche (example_internal_test.go) :

package example_test

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 conclusion, appeler des fonctions de test à partir de fichiers non-test viole les principes des tests Go. Des packages de tests distincts doivent être utilisés à des fins de tests unitaires, en respectant le flux de travail et les conventions établies.

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