Les tests d'unité d'écriture dans GO sont simples en raison du package testing
intégré. Voici une approche étape par étape des tests d'unité d'écriture:
foo.go
, créez un fichier de test nommé foo_test.go
dans le même package. Fonctions de test d'écriture : à l'intérieur foo_test.go
, écrivez des fonctions qui commencent par Test
suivie du nom de la fonction testée. Ces fonctions prennent un argument *testing.T
Par exemple:
<code class="go">func TestFoo(t *testing.T) { // Test code here }</code>
Affirmation : Utilisez t.Error
ou t.Errorf
pour enregistrer les erreurs et échouer au test. t.Fatal
ou t.Fatalf
peut être utilisé pour arrêter le test immédiatement si quelque chose de critique échoue.
<code class="go">if result != expected { t.Errorf("expected %v, but got %v", expected, result) }</code>
go test
dans le terminal à partir du répertoire contenant les fichiers de test.go test -cover
.Tests basés sur la table : utilisez une approche basée sur la table pour réduire efficacement la duplication du code et tester plusieurs scénarios.
<code class="go">func TestFoo(t *testing.T) { tests := []struct { input int expected int }{ {1, 2}, {2, 4}, {-1, -2}, } for _, tt := range tests { result := foo(tt.input) if result != tt.expected { t.Errorf("foo(%d) = %d, want %d", tt.input, result, tt.expected) } } }</code>
L'adhésion aux meilleures pratiques dans l'écriture des tests unitaires dans GO peut améliorer considérablement la qualité et la maintenabilité de vos tests. Voici quelques pratiques clés:
TestFooReturnsDoubleOfInput
est plus descriptif que TestFoo
. Test parallèle : utilisez t.Parallel()
pour exécuter des tests en parallèle, ce qui peut accélérer considérablement votre suite de tests, en particulier pour les projets plus grands.
<code class="go">func TestFoo(t *testing.T) { t.Parallel() // Test code here }</code>
La moquerie dans GO peut aider à isoler l'unité testée en remplaçant ses dépendances par de faux objets contrôlés. Voici comment vous pouvez utiliser la moquerie pour améliorer vos tests unitaires:
Choisissez une bibliothèque moqueuse : les bibliothèques populaires GO Mocking incluent GoMock
, testify/mock
et gomock
. Par exemple, avec testify/mock
:
<code class="go">import ( "testing" "github.com/stretchr/testify/mock" ) type MockDependency struct { mock.Mock } func (m *MockDependency) SomeMethod(input string) string { args := m.Called(input) return args.String(0) }</code>
Configuration des attentes : Avant d'exécuter la fonction testée, configurez le comportement attendu de la simulation à l'aide de l'API de la bibliothèque.
<code class="go">mockDependency := new(MockDependency) mockDependency.On("SomeMethod", "input").Return("output")</code>
Affirmer les appels de simulation : Après le test, vérifiez que la maquette a été appelée comme prévu.
<code class="go">mockDependency.AssertCalled(t, "SomeMethod", "input")</code>
Plusieurs outils peuvent vous aider à gérer et à exécuter efficacement les tests unitaires en Go. Voici une liste de quelques populaires:
go test
intégrée est polyvalente et peut être utilisée avec divers indicateurs pour personnaliser l'exécution du test. Par exemple, go test -v
pour la sortie verbeux ou go test -coverprofile=coverage.out
pour générer un rapport de couverture.Gomega
pour les matchs et les affirmations.require
pour les affirmations de test, assert
des assertions courantes, suite
pour l'organisation de test et mock
pour les dépendances moqueuses.L'utilisation de ces outils en combinaison peut aider à rationaliser votre processus de test, à améliorer la couverture des tests et à rendre votre suite de test plus maintenable et plus efficace.
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!