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:
foo.go
eine Testdatei mit dem Namen foo_test.go
im selben Paket. 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>
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>
go test
im terminal aus dem Verzeichnis mit den Testdateien aus.go test -cover
.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>
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:
TestFooReturnsDoubleOfInput
beschreibender als TestFoo
. 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>
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:
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>
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>
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>
Mehrere Tools können Ihnen helfen, Unit -Tests effizient in Go zu verwalten und auszuführen. Hier ist eine Liste einiger beliebter:
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.Gomega
für Matcher und Behauptungen verwendet werden.assert
require
fließenden Behauptungen, suite
für die Testorganisation und die Verspottungsabhängigkeiten mock
, umfassen.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!