Maison > développement back-end > Golang > Analyse des échecs de test et méthodes de débogage dans Golang

Analyse des échecs de test et méthodes de débogage dans Golang

WBOY
Libérer: 2023-08-07 10:29:03
original
1531 Les gens l'ont consulté

Méthodes d'analyse des échecs de test et de débogage dans Golang

Introduction :
Dans le processus de développement logiciel, les tests sont un maillon indispensable. Grâce aux tests, nous pouvons vérifier si le code que nous avons écrit répond aux attentes et s'il contient des erreurs. Cependant, nos tests échouent parfois et nous devons à ce stade analyser et déboguer pour découvrir la cause de l'erreur. Cet article présentera les méthodes courantes d'analyse des échecs de test et de débogage dans Golang, et donnera des exemples de code correspondants.

1. Analyse des erreurs
Lorsque notre test échoue, nous devons d'abord déterminer la raison de l'échec du test. Le cadre de test de Golang fournit des résultats riches pour nous aider à analyser les raisons de l'échec. Nous pouvons exécuter la commande suivante dans le répertoire où se trouve le fichier de test :

go test -run TestFunc -v
Copier après la connexion

Parmi elles, TestFunc est le nom de la fonction de test, et -v signifie afficher des informations plus détaillées.

Ci-dessous, nous présenterons les causes courantes d'échec et leurs méthodes d'analyse.

  1. La valeur attendue n'est pas égale à la valeur réelle
    Lorsque nous vérifions si un certain résultat répond aux attentes lors du test, il peut y avoir des situations où la valeur attendue et la valeur réelle ne sont pas égales. À ce stade, le cadre de test Golang nous indiquera le contenu spécifique des valeurs attendues et réelles.

Par exemple, nous avons la fonction de test suivante :

func TestAdd(t *testing.T) {
    result := Add(2, 3)
    expected := 5
    if result != expected {
        t.Errorf("Add(2, 3) = %d; expected %d", result, expected)
    }
}
Copier après la connexion

Lorsque le test est exécuté, si le résultat réel n'est pas égal au résultat attendu, le résultat sera similaire à :

--- FAIL: TestAdd (0.00s)
    main_test.go:10: Add(2, 3) = 6; expected 5
Copier après la connexion

Grâce à la sortie, nous pouvons clairement voyez que le résultat réel est 6 et que le résultat attendu est 5 ; de cette façon, nous pouvons facilement trouver le problème.

  1. Le programme se termine anormalement
    Parfois, le code testé dans notre test peut se terminer anormalement, et nous devons alors trouver la cause de l'erreur.

Tout d'abord, nous pouvons déterminer le point de sortie anormal et la relation d'appel du programme en imprimant les informations sur la pile. Par exemple, nous avons la fonction de test suivante :

func TestDivide(t *testing.T) {
    result := Divide(10, 0)
    t.Log(result)
}
Copier après la connexion

Lorsque la fonction testée Divide(10, 0) est appelée, si le diviseur est 0, une exception panique sera déclenchée. Le framework de test Golang imprimera les informations d'exception comme suit :

--- FAIL: TestDivide (0.00s)
    main_test.go:10: runtime error: integer divide by zero
Copier après la connexion

Grâce aux informations de sortie ci-dessus, nous pouvons voir qu'une erreur de division entière par zéro s'est produite lorsque la fonction de test a exécuté Divide(10, 0).

Afin de mieux analyser le problème, nous pouvons utiliser la récupération dans la fonction de test pour capturer la panique et la générer dans le fichier journal spécifié ou dans la sortie standard via le package de journaux de la bibliothèque standard.

func TestDivide(t *testing.T) {
    defer func() {
        if err := recover(); err != nil {
            t.Errorf("TestDivide failed: %v", err)
            // 或者使用 log.Fatal(err)将错误输出到标准错误流
        }
    }()
    result := Divide(10, 0)
    t.Log(result)
}
Copier après la connexion

De cette façon, même si la fonction testée panique, nous pouvons capturer l'exception et afficher les informations d'erreur pertinentes.

2. Analyse de débogage
Lorsque nous trouvons la raison de l'échec du test, nous devons parfois déboguer pour découvrir l'erreur spécifique. Voici plusieurs méthodes de débogage.

  1. Utiliser la sortie fmt
    Dans la fonction de test, nous pouvons utiliser la fonction Printf ou Println du package fmt pour afficher la valeur de la variable. En observant la valeur de sortie, nous pouvons nous aider à découvrir où se situe l'erreur.
func TestAdd(t *testing.T) {
    result := Add(2, 3)
    fmt.Println(result)
    expected := 5
    if result != expected {
        t.Errorf("Add(2, 3) = %d; expected %d", result, expected)
    }
}
Copier après la connexion

En affichant les résultats, nous pouvons constater que la valeur du résultat n'est pas celle de 5 à laquelle nous nous attendions, le problème peut donc résider dans la fonction Ajouter.

  1. Utiliser le débogage par point d'arrêt
    Vous pouvez utiliser certains environnements de développement intégrés (IDE) pour le débogage dans Golang, par exemple en utilisant Visual Studio Code avec le débogueur Delve.

Tout d'abord, dans la zone de code qui doit être déboguée, nous pouvons insérer un point d'arrêt devant la ligne clé. On démarre ensuite le débogueur en exécutant la commande suivante dans le terminal :

dlv test -- -test.run TestFunc
Copier après la connexion

Où TestFunc est le nom de la fonction de test que l'on souhaite déboguer.

Après le démarrage du débogueur, nous pouvons saisir l'emplacement du point d'arrêt via des opérations de ligne de commande, afficher les valeurs des variables et exécuter le code étape par étape. Cela nous aide à identifier le problème.

Conclusion : 
L'introduction de cet article aux méthodes d'analyse des échecs de test et de débogage dans Golang peut aider les développeurs à mieux comprendre et utiliser le cadre de test Golang pour les tests et le débogage.

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!

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal