Heim > Backend-Entwicklung > Golang > Wie schreibt man Unit -Tests in Go?

Wie schreibt man Unit -Tests in Go?

百草
Freigeben: 2025-03-21 18:34:34
Original
155 Leute haben es durchsucht

Wie schreibt man Unit -Tests in Go?

Das Schreiben von Unit-Tests in Go ist aufgrund des integrierten testing unkompliziert. Hier finden Sie einen Schritt-für-Schritt-Ansatz zum Schreiben von Unit-Tests:

  1. Erstellen Sie eine Testdatei : Erstellen Sie für eine Quelldatei mit dem Namen foo.go eine Testdatei mit dem Namen foo_test.go im selben Paket.
  2. Schreiben Sie Testfunktionen : In foo_test.go schreiben Funktionen, die mit Test beginnen, gefolgt vom Namen der zu testenden Funktion. Diese Funktionen erfordern ein Argument *testing.T . Zum Beispiel:

     <code class="go">func TestFoo(t *testing.T) { // Test code here }</code>
    Nach dem Login kopieren
  3. Behauptungen : Verwenden Sie t.Error oder t.Errorf um Fehler zu protokollieren und den Test zu bestehen. t.Fatal oder t.Fatalf kann verwendet werden, um den Test sofort zu stoppen, wenn etwas Kritisches fehlschlägt.

     <code class="go">if result != expected { t.Errorf("expected %v, but got %v", expected, result) }</code>
    Nach dem Login kopieren
  4. Tests ausführen : Führen Sie Tests mit dem Befehl go test im terminal aus dem Verzeichnis mit den Testdateien aus.
  5. Testabdeckung : Um die Testabdeckung zu erhalten, rennen Sie go test -cover .
  6. Tabellengesteuerte Tests : Verwenden Sie einen tabellangestellten Ansatz, um die Code-Duplikation zu reduzieren und mehrere Szenarien effizient zu testen.

     <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>
    Nach dem Login kopieren

Was sind die besten Praktiken für das Schreiben effektiver Unit -Tests in Go?

Das Einhalten von Best Practices bei Schreiben von Unit -Tests in GO kann die Qualität und Wartbarkeit Ihrer Tests erheblich verbessern. Hier sind einige wichtige Praktiken:

  1. Halten Sie Tests einfach und fokussiert : Jeder Test sollte ein bestimmtes Verhalten oder ein bestimmtes Szenario abdecken. Dies erleichtert das Verständnis und die Aufrechterhaltung von Tests.
  2. Verwenden Sie beschreibende Namen : Nennen Sie Ihre Testfunktionen und Variablen klar, um ihren Zweck zu vermitteln. Beispielsweise ist TestFooReturnsDoubleOfInput beschreibender als TestFoo .
  3. Verwenden Sie Helferfunktionen : Wenn Sie feststellen, dass Sie dasselbe Setup- oder Assertion -Logik über mehrere Tests hinweg wiederholen, verschieben Sie sie in eine Helferfunktion, um die Duplikation zu verringern.
  4. Test auf Fehlerbedingungen : Testen Sie nicht nur glückliche Pfade; Testen Sie auch, wie sich Ihre Funktion mit ungültigen Eingaben oder bei Fehlerbedingungen verhält.
  5. Parallele Tests : Verwenden Sie t.Parallel() , um Tests parallel auszuführen, die Ihre Testsuite, insbesondere für größere Projekte, erheblich beschleunigen können.

     <code class="go">func TestFoo(t *testing.T) { t.Parallel() // Test code here }</code>
    Nach dem Login kopieren
  6. Scheinabhängigkeiten : Verwenden Sie das Verspotten, um die von externe Abhängigkeiten getestete Funktion zu isolieren und kontrolliertere und zuverlässigere Tests zu ermöglichen.
  7. Erzielen Sie eine hohe Testabdeckung : Streben Sie eine hohe Testabdeckung an, aber denken Sie daran, dass eine 100% ige Abdeckung nicht immer erforderlich ist. Konzentrieren Sie sich auf kritische Pfade und Randfälle.
  8. Kontinuierliche Integration : Integrieren Sie Ihre Tests in eine CI/CD -Pipeline, um sicherzustellen, dass die Tests bei jeder Codeänderung automatisch ausgeführt werden.

Wie können Sie sich mit Verspotten in GO um Ihre Einheitstests verbessern?

Das Verspotten in GO kann helfen, das zu testende Gerät zu isolieren, indem seine Abhängigkeiten durch kontrollierte, gefälschte Objekte ersetzt werden. So können Sie sich mit Verspotten einsetzen, um Ihre Unit -Tests zu verbessern:

  1. Wählen Sie eine Spottbibliothek : Zu den beliebten GO -Spottbibliotheken gehören GoMock , testify/mock und gomock . Zum Beispiel mit 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>
    Nach dem Login kopieren
  2. Scheinobjekte erstellen : Definieren Sie Scheinobjekte, die die Schnittstelle der Abhängigkeit nachahmen, die Sie verspotten möchten. Richten Sie das erwartete Verhalten für diese Mocks vor, bevor Sie den Test ausführen.
  3. Einrichten der Erwartungen : Stellen Sie vor der Ausführung der zu testenden Funktion das erwartete Verhalten des Mocks mithilfe der API der Bibliothek ein.

     <code class="go">mockDependency := new(MockDependency) mockDependency.On("SomeMethod", "input").Return("output")</code>
    Nach dem Login kopieren
  4. Führen Sie den Test aus : Führen Sie die Funktion aus, die Sie mit der Scheinabhängigkeit testen. Das Schein wird sich als vordefiniert verhalten.
  5. Assert Mock Calls : Vergewissern Sie sich nach dem Test, dass das Schein wie erwartet genannt wurde.

     <code class="go">mockDependency.AssertCalled(t, "SomeMethod", "input")</code>
    Nach dem Login kopieren
  6. Vorteile : Mit Spott können Sie das Verhalten Ihres Codes isoliert testen und Tests schneller und zuverlässiger machen. Es ermöglicht auch das Testen von Fehlerszenarien, ohne die realen Dienste zu beeinflussen.

Welche Tools können Ihnen helfen, Unit -Tests effizient in Go zu verwalten und auszuführen?

Mehrere Tools können Ihnen helfen, Unit -Tests effizient in Go zu verwalten und auszuführen. Hier ist eine Liste einiger beliebter:

  1. GO-Testbefehl : Der integrierte go test ist vielseitig und kann mit verschiedenen Flags verwendet werden, um die Testausführung anzupassen. Zum Beispiel go test -v für die ausführliche Ausgabe oder go test -coverprofile=coverage.out um einen Deckungsbericht zu erstellen.
  2. Ginkgo : Ein erweitertes Testframework, das eine lesbarere DSL und eine bessere Unterstützung für Integration und End-to-End-Test bietet. Es kann in Verbindung mit Gomega für Matcher und Behauptungen verwendet werden.
  3. Aussagen : Eine beliebte Suite von Testpaketen, die für Testbehauptungen, assert require fließenden Behauptungen, suite für die Testorganisation und die Verspottungsabhängigkeiten mock , umfassen.
  4. GoConvey : Ein alternatives Test -Framework, das eine interaktivere und visuellere Möglichkeit zum Schreiben von Tests und Anzeigen von Ergebnissen bietet, was für TDD besonders nützlich ist.
  5. Deckung : Ein Debugger für GO, mit dem Sie Tests durchlaufen und Ihnen dabei helfen können, Probleme effizienter zu diagnostizieren und zu lösen.
  6. Overalls : Ein Tool, das in Ihre CI -Pipeline integriert werden kann, um über die Zeit über die Testabdeckung zu verfolgen und zu melden, um sicherzustellen, dass Ihre Testsuite effektiv bleibt.
  7. Circleci, Travis CI oder GitHub -Aktionen : Diese kontinuierlichen Integrationsdienste können das Ausführen Ihrer Tests automatisieren und nach jedem Commit ein sofortiges Feedback zur Gesundheit Ihrer Codebasis geben.

Die Verwendung dieser Tools in Kombination kann dazu beitragen, Ihren Testprozess zu optimieren, die Testabdeckung zu verbessern und Ihre Testsuite aufrechterhalten und effizienter zu gestalten.

Das obige ist der detaillierte Inhalt vonWie schreibt man Unit -Tests in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage