Maison >développement back-end >Golang >Comment tester des packages dans Go ?

Comment tester des packages dans Go ?

WBOY
WBOYoriginal
2024-06-01 11:50:56987parcourir

En utilisant le cadre de test intégré du langage Go, les développeurs peuvent facilement écrire et exécuter des tests pour leur code. Le fichier de test se termine par _test.go et contient des fonctions de test commençant par Test, où le paramètre *testing.T représente l'instance de test. Les messages d'erreur sont enregistrés à l'aide de t.Error(). Les tests peuvent être exécutés en exécutant la commande go test. Les sous-tests permettent de décomposer les fonctions de test en parties plus petites et de les créer via t.Run(). Un exemple pratique inclut un fichier de test écrit pour la fonction IsStringPalindrome() dans le package utils, qui teste l'exactitude de la fonction en utilisant une série de chaînes d'entrée et de sortie attendue.

如何在 Go 语言中测试包?

Comment tester des packages en langage Go ?

Le langage Go fournit un puissant cadre de test intégré qui permet aux développeurs d'écrire et d'exécuter facilement des tests pour leur code. Voici comment utiliser le package de test Go pour tester votre programme.

Écriture de tests

Dans Go, les fichiers de test se terminent par _test.go et sont placés dans le même répertoire que le package que vous souhaitez tester. Les fichiers de test contiennent une ou plusieurs fonctions de test commençant par Test suivi de la fonctionnalité à tester. Test 开头,后面跟要测试的功能。

以下是一个示例测试函数:

import "testing"

func TestAdd(t *testing.T) {
    if Add(1, 2) != 3 {
        t.Error("Add(1, 2) returned an incorrect result")
    }
}

*testing.T 参数表示测试实例。错误信息使用 t.Error() 记录。

运行测试

可以通过运行以下命令来运行测试:

go test

如果测试成功,将显示诸如 "PASS" 之类的消息。如果出现错误,将显示错误信息。

使用子测试

子测试允许将一个测试函数分解成更小的部分。这有助于组织测试代码并提高可读性。

以下是如何编写子测试:

func TestAdd(t *testing.T) {
    t.Run("PositiveNumbers", func(t *testing.T) {
        if Add(1, 2) != 3 {
            t.Error("Add(1, 2) returned an incorrect result")
        }
    })

    t.Run("NegativeNumbers", func(t *testing.T) {
        if Add(-1, -2) != -3 {
            t.Error("Add(-1, -2) returned an incorrect result")
        }
    })
}

实战案例

假设我们有一个名为 utils 的包,里面包含一个 IsStringPalindrome() 函数,用于检查一个字符串是否是回文字符串。

下面是如何编写一个测试文件来测试这个函数:

package utils_test

import (
    "testing"
    "utils"
)

func TestIsStringPalindrome(t *testing.T) {
    tests := []struct {
        input    string
        expected bool
    }{
        {"", true},
        {"a", true},
        {"bb", true},
        {"racecar", true},
        {"level", true},
        {"hello", false},
        {"world", false},
    }

    for _, test := range tests {
        t.Run(test.input, func(t *testing.T) {
            if got := utils.IsStringPalindrome(test.input); got != test.expected {
                t.Errorf("IsStringPalindrome(%s) = %t; want %t", test.input, got, test.expected)
            }
        })
    }
}

在这个测试文件中:

  • tests 数组定义了一系列输入字符串和预期的输出。
  • for 循环遍历 tests 数组,并使用 t.Run() 创建子测试。
  • 每个子测试调用 utils.IsStringPalindrome() 函数并将其结果与预期结果进行比较。如果结果不一致,它使用 t.Errorf()
  • Ce qui suit est un exemple de fonction de test :
rrreee🎜*testing.T Les paramètres représentent l'instance de test. Les messages d'erreur sont enregistrés en utilisant t.Error(). 🎜🎜Exécuter des tests🎜🎜Vous pouvez exécuter des tests en exécutant la commande suivante : 🎜rrreee🎜Si le test réussit, un message tel que "PASS" s'affichera. Si une erreur se produit, un message d'erreur s'affichera. 🎜🎜Utilisation de sous-tests🎜🎜Les sous-tests permettent de diviser une fonction de test en parties plus petites. Cela permet d'organiser le code de test et d'améliorer la lisibilité. 🎜🎜Voici comment écrire un sous-test : 🎜rrreee🎜Cas pratique🎜🎜Supposons que nous ayons un package nommé utils, qui contient une fonction IsStringPalindrome() pour vérifier si une chaîne est un palindrome. 🎜🎜Voici comment écrire un fichier de test pour tester cette fonction : 🎜rrreee🎜Dans ce fichier de test : 🎜
  • tests Le tableau définit une série de chaînes d'entrée et la sortie attendue. 🎜
  • for parcourt le tableau tests et crée des sous-tests en utilisant t.Run(). 🎜
  • Chaque sous-test appelle la fonction utils.IsStringPalindrome() et compare ses résultats aux résultats attendus. Si les résultats sont incohérents, il utilise t.Errorf() pour enregistrer une erreur. 🎜🎜

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