Maison > développement back-end > Golang > Partage de cas pratiques de développement piloté par les tests dans Golang

Partage de cas pratiques de développement piloté par les tests dans Golang

WBOY
Libérer: 2023-08-08 12:22:45
original
909 Les gens l'ont consulté

Partage de cas pratiques de développement piloté par les tests dans Golang

Partage de cas de pratiques de développement piloté par les tests dans Golang

Introduction :
Le développement piloté par les tests (TDD) est une méthodologie de développement logiciel dont l'idée principale est d'écrire des cas de test avant d'écrire du code. . Dans un langage de programmation de haut niveau comme Golang qui met l'accent sur la qualité et les performances du code, le développement piloté par les tests est une méthode de développement très efficace. Cet article partagera quelques cas pratiques de développement piloté par les tests dans Golang et joindra des exemples de code correspondants.

1. Tests unitaires
Les tests unitaires sont la partie la plus fondamentale du développement piloté par les tests. Ils garantissent l'exactitude de chaque petite fonction en écrivant des cas de test pour une seule fonction ou méthode. Voici un exemple de code pour un simple test unitaire Golang :

package main

import (
    "testing"
)

// 要测试的函数
func Add(a, b int) int {
    return a + b
}

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

Dans cet exemple, nous définissons une fonction Add, les paramètres sont deux entiers et la valeur de retour est leur somme. Ensuite, nous avons écrit une fonction TestAdd comme scénario de test et utilisé la fonction t.Errorf pour déterminer si les résultats de la fonction Add étaient cohérents avec les attentes. En exécutant la commande go test, nous pouvons exécuter ce test unitaire directement.

2. Tests d'intégration
Les tests d'intégration sont un autre maillon important du développement piloté par les tests. Ils sont utilisés pour tester si les interactions entre les différents modules sont correctes. Voici un exemple de code pour un simple test d'intégration Golang :

package main

import (
    "net/http"
    "net/http/httptest"
    "testing"
)

func TestHandler(t *testing.T) {
    // 创建一个测试用的HTTP请求
    req, err := http.NewRequest("GET", "/hello", nil)
    if err != nil {
        t.Fatal(err)
    }

    // 创建一个HTTP测试服务器
    rr := httptest.NewRecorder()
    handler := http.HandlerFunc(HelloHandler)

    // 使用HTTP测试服务器处理请求
    handler.ServeHTTP(rr, req)

    // 检查HTTP响应的状态码
    if status := rr.Code; status != http.StatusOK {
        t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusOK)
    }

    // 检查HTTP响应的正文内容
    expected := "Hello, World!"
    if rr.Body.String() != expected {
        t.Errorf("handler returned unexpected body: got %v want %v", rr.Body.String(), expected)
    }
}

func HelloHandler(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Hello, World!"))
}
Copier après la connexion

Dans cet exemple, nous avons écrit une fonction de traitement HTTP nommée HelloHandler pour gérer la requête GET avec l'URL "/hello" et renvoyer "Hello, World!". Ensuite, nous avons écrit une fonction de test d'intégration appelée TestHandler. Dans cette fonction, nous utilisons la fonction NewRecorder et la méthode ServeHTTP fournies par le package httptest pour simuler un serveur HTTP et traiter les requêtes. Nous pouvons vérifier l'exactitude de la fonction de traitement HTTP en vérifiant le code d'état renvoyé et le contenu du corps de la réponse.

3. Développement piloté par le comportement
Le développement piloté par le comportement (BDD) est une méthode de développement qui combine le développement piloté par les tests et la conception pilotée par le domaine. Elle a également été largement utilisée dans Golang. Voici un exemple de code pour un simple test Golang BDD :

package main

import (
    "testing"

    "github.com/stretchr/testify/assert"
)

func TestFizzBuzz(t *testing.T) {
    assert := assert.New(t)

    input := 15
    expect := "FizzBuzz"
    result := fizzBuzz(input)
    assert.Equalf(expect, result, "fizzBuzz(%d) = %s; want %s", input, result, expect)
}

func fizzBuzz(n int) string {
    if n%3 == 0 && n%5 == 0 {
        return "FizzBuzz"
    } else if n%3 == 0 {
        return "Fizz"
    } else if n%5 == 0 {
        return "Buzz"
    } else {
        return strconv.Itoa(n)
    }
}
Copier après la connexion

Dans cet exemple, nous avons écrit une fonction appelée fizzBuzz pour renvoyer la chaîne correspondante en fonction de l'entier d'entrée n. Nous écrivons des cas de test clairs et lisibles de style BDD en utilisant la fonction assert.New et la méthode assert.Equalf fournies par la bibliothèque github.com/stretchr/testify/assert. Cette approche peut mieux permettre aux membres de l'équipe de comprendre les exigences et la logique du code.

Conclusion : 
Le développement piloté par les tests est une méthode de développement logiciel très efficace, qui peut garantir la qualité du code et améliorer l'efficacité du développement, et est également largement utilisée dans Golang. Grâce à l'introduction et à l'exemple de code de cet article, je pense que les lecteurs peuvent maîtriser les principes de base et les méthodes pratiques du développement piloté par les tests dans Golang. J'espère que les lecteurs pourront mettre en pratique le développement piloté par les tests dans leurs futurs travaux de développement, améliorant ainsi la fiabilité et la maintenabilité du code.

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