Le test logiciel est un processus qui évalue les métriques des programmes à l'aide d'outils, de scripts ou manuellement.

Les tests font partie intégrante du cycle de développement logiciel. Des tests complets fournissent des informations détaillées sur l'intégrité de votre application.

Vous pouvez prévenir et corriger les bogues en écrivant des tests, en évaluant les performances du programme et en automatisant les workflows.

Premiers pas avec les tests dans Go

La bibliothèque standard Go fournit une évolution essai forfait. La essai Le package a des fonctionnalités d'analyse comparative, de fuzzing, de saut, de sous-test, de sous-analyse comparative et d'autres fonctionnalités.

Tester avec ce package est facile. Voici une structure de test simple qui servira de modèle pour le test :

taper Cas structure {
// la sortie attendue du test
attendu entier

// la sortie de la fonction
réel entier

// la valeur que vous passez à la fonction
dispute chaîne de caractères
}

Voici une fonction simple qui convertit les chaînes en nombres entiers. Votre test testera cette fonction.

instagram viewer
importer (
"strconv"
)

fonctionChaîneVersEntier(str chaîne de caractères)entier {
entier, err := strconv. Atoi (str.)

si erreur != néant {
revenir0
}

revenir entier
}

La ChaîneVersEntier la fonction renvoie 0 s'il y a une erreur lors de la conversion et l'entier s'il n'y a pas d'erreur.

Voici une fonction de test pour StringToInteger :

fonctionTestStringToInteger(tester *tester. T) {
Entier attendu := ChaîneVersEntier("3")

caseInstance := Cas {
attendu: Int attendu,
réel: 3,
}

si caseInstance.expected == caseInstance.réel {
// un peu de code ici
} autre {
test. Échouer()
}
}

La TestStringToInteger la fonction de test accepte un essai. J objet comme argument. La Entier attendu La variable contient le résultat de la conversion de chaîne. La caseInstance variable est la structure Cases instanciée pour le test. La si L'instruction compare les valeurs attendues et réelles.

La Échouer La méthode renvoie un test échoué dans l'instruction else si les valeurs ne sont pas égales.

Go fournit un test commande pour automatiser et récupérer des informations sur vos tests et programmes.

aller test
aller aider à tester

La page d'aide fournit des informations détaillées sur la façon dont aller tester œuvres:

L'écosystème Go abrite de nombreuses bibliothèques qui rendent les tests plus accessibles et flexibles. Il y a beaucoup de fonctionnalités au-delà du essai forfait comprenant régression et tests unitaires.

Le forfait Témoignage

Le forfait Témoignage est l'un des frameworks Go les plus populaires pour tester les packages. Il fournit les outils dont vous aurez besoin pour écrire des tests efficaces, avec des assertions simples, des moqueries et des fonctions de suite de tests.

Testify convient au développement piloté par les tests puisque le package fournit une faux forfait. Cela fournit un mécanisme d'écriture d'objets fictifs que vous pouvez utiliser à la place d'objets réels dans les tests.

Le forfait fournit également :

  • Un affirmer package qui fournit des méthodes utiles pour écrire des tests conviviaux et lisibles.
  • UN exiger paquet similaire au affirmer package pour renvoyer des résultats booléens.
  • UN suite package pour les suites de tests avec des structures.

Témoigner s'étend sur essai package, et vous pouvez utiliser le aller tester commande pour exécuter des tests écrits avec le package Testify.

Testify prend en charge les versions Go à partir de 1.13. Vous pouvez ajouter le package en tant que dépendance de projet avec cette commande :

aller obtenir github.com/stretchr/testify

Voici un test d'assertion simple avec le package Testify affirmer forfait:

forfait principale

importer (
"essai"
"github.com/stretchr/testify/assert" // n'affirme que le paquet
)

// le nom de la fonction doit être "quelque chose" par convention
fonctionTesterquelquechose(t *tester. T) {
// affirmation de l'égalité
affirmer. Égal (t, 123, 123, "ils devraient être égaux")

// affirmation de l'inégalité
affirmer. NonÉgal (t, 123, 456, "ils ne doivent pas être égaux")
}

La Testerquelquechose la fonction de test prend la structure de type de test de la essai package comme argument. La Égal et Inégal les méthodes sont pour les assertions basées sur l'égalité et l'inégalité de Testify affirmer forfait.

Le forfait GoConvey

GoConvey est un outil de test Go amorcé pour l'expressivité sur le essai forfait. Il comprend terminal (CLI) et navigateur (GUI) fonctionnalité de test.

Le package GoConvey s'intègre avec le essai package, fournissant une interface utilisateur Web pour travailler avec des tests Go natifs. Il inclut également des fonctionnalités pour les tests de régression, des sorties personnalisables et la génération de code de test. Vous pouvez exécuter des tests automatiquement, accéder aux formats de couverture en HTML et personnaliser l'interface graphique.

Exécutez cette commande dans le terminal de votre espace de travail Go pour installer le package Go Convey.

aller obtenir github.com/smartystreets/goconvey

Voici un exemple simple d'écriture de tests avec le package GoConvey.

forfait principale

importer (
. "github.com/smartystreets/goconvey/convey"
"essai"
)

fonctionTesterquelquechose(t *tester. T) {
// Ne transmettez t qu'aux appels Convey de niveau supérieur
Transmettre("Déclarer variable", t, fonction() {
x := 1

Transmettre("variable d'incrémentation", fonction() {
x++

Transmettre("affirmer l'égalité", fonction() {
Donc (x, DevraitÉgal, 2)
})
})
})
}

Vous devrez importer le transmettre package en utilisant la notation par points pour le test.

La fonction Convey de la Transmettre package aide à la portée des tests. Le dernier Transmettre l'appel de fonction dans l'exemple de code affirme l'égalité entre les X variables et 2, en utilisant le DevraitÉgal fonction.

Le package HTTP Expect

La Attendre HTTP package est un package déclaratif, concis et facile à utiliser pour les tests HTTP et API REST de bout en bout de Go. Vous pouvez l'utiliser pour créer des requêtes HTTP de manière incrémentielle et inspecter les réponses et leurs charges utiles de manière récursive.

La httpattend package est un ensemble de générateurs chaînés pour les requêtes HTTP et les assertions sur les réponses HTTP et les charges utiles. Il est construit sur http, essai, et d'autres forfaits. Le package fonctionne également bien avec le module intégré test http forfait.

httpattend fournit des fonctionnalités pour la création de requêtes avec la construction d'URL, les en-têtes, les cookies et les charges utiles. Il gère les assertions de réponse, les assertions de charge utile, la jolie impression et les WebSockets.

Exécutez cette commande dans le terminal de votre répertoire de travail pour installer le httpattend forfait.

aller obtenir github.com/gavv/httpexpect

Voici un exemple simple de test d'une fonction de gestionnaire avec la httpattend forfait.

forfait principale

importer (
"fmt"
"github.com/gavv/httpattend/v2"
"net/http"
"net/http/httptest"
"essai"
)

fonctionexempleHandler()http.Gestionnaire {
revenir http. FonctionGestionnaire(fonction(écrivain http. ResponseWriter, demande *http. Demande) {
fmt. Fprintln (écrivain, "Hello World")
})
}

fonctionTestexampleHandler(t *tester. T) {
// crée http. Gestionnaire
gestionnaire := exempleHandler()

// lance le serveur en utilisant httptest
serveur := httptest. NewServer (gestionnaire)
reporter serveur. Proche()

// crée une instance d'attente http
attendre := httpattend. Nouveau (t, serveur. URL)

// est-ce que ça marche?
attendre. OBTENIR("/").
Attendre().
Statut (http. StatusOK).JSON().Array().Empty()
}

La exempleHandler La fonction de gestionnaire renvoie un gestionnaire HTTP pour le httpattend forfait. La TestexampleHandler La fonction déclare une instance de la fonction de gestionnaire. Il crée ensuite un nouveau serveur pour tester le point de terminaison avec le test http forfait.

La attendre la variable est votre httpattend instance qui frappe le OBTENIR demander le chemin racine du point de terminaison sur le serveur. La Statut la fonction renvoie le code d'état (dans ce cas, 200) si le test réussit.

Rédigez des tests complets et intuitifs

Les tests permettent d'évaluer l'intégrité de votre application, et il existe de nombreux modèles et méthodes de test que vous pouvez utiliser pour vos programmes. Au cœur de votre flux de travail de test, vous devez écrire des tests intuitifs que vous pouvez améliorer à mesure que vos programmes évoluent au fil du temps.