組み込みのtesting
パッケージのため、GOでユニットテストを作成するのは簡単です。これがユニットテストを作成するための段階的なアプローチです。
foo.go
という名前のソースファイルの場合、同じパッケージでfoo_test.go
という名前のテストファイルを作成します。テスト関数の書き込み: foo_test.go
の内部、 Test
から始まる機能を書き、テスト対象の関数の名前を書き込みます。これらの関数は*testing.T
引数を取得します。例えば:
<code class="go">func TestFoo(t *testing.T) { // Test code here }</code>
アサーション: t.Error
またはt.Errorf
を使用してエラーを記録し、テストに失敗します。 t.Fatal
またはt.Fatalf
使用して、重要なものが失敗した場合にすぐにテストを停止できます。
<code class="go">if result != expected { t.Errorf("expected %v, but got %v", expected, result) }</code>
go test
コマンドを使用してテストを実行します。go test -cover
します。テーブル駆動型テスト:テーブル駆動型のアプローチを使用して、コードの重複を減らし、複数のシナリオを効率的にテストします。
<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>
GOの単体テストを書く際のベストプラクティスを順守することで、テストの品質と保守性を大幅に向上させることができます。ここにいくつかの重要なプラクティスがあります:
TestFooReturnsDoubleOfInput
、 TestFoo
よりも説明的です。並列テスト: t.Parallel()
を使用して、テストを並行して実行します。これは、特に大規模なプロジェクトでテストスイートを大幅に高速化できます。
<code class="go">func TestFoo(t *testing.T) { t.Parallel() // Test code here }</code>
GOのock笑は、依存関係を制御された偽のオブジェクトに置き換えることにより、テスト中のユニットを分離するのに役立ちます。モッキングを利用してユニットテストを強化する方法は次のとおりです。
モッキングライブラリを選択してください:人気のGo Mockingライブラリには、 GoMock
、 testify/mock
、 gomock
が含まれます。たとえば、 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>
予想のセットアップ:テスト中の関数を実行する前に、ライブラリのAPIを使用してMOCKの予想される動作を設定します。
<code class="go">mockDependency := new(MockDependency) mockDependency.On("SomeMethod", "input").Return("output")</code>
アサートモックコール:テスト後、モックが予想どおりに呼び出されたことを確認してください。
<code class="go">mockDependency.AssertCalled(t, "SomeMethod", "input")</code>
いくつかのツールは、GOでユニットテストを効率的に管理および実行するのに役立ちます。これが人気のあるもののリストです。
go test
コマンドは多用途であり、さまざまなフラグで使用してテスト実行をカスタマイズできます。たとえば、冗長出力のためにgo test -v
go test -coverprofile=coverage.out
カバレッジレポートを生成します。Gomega
と一緒にマッチャーやアサーションのために使用できます。require
、流fluentアサーションのassert
、テスト組織のsuite
、およびモッキング依存関係のmock
を含む、テスト関連パッケージの人気のスイート。これらのツールを組み合わせて使用すると、テストプロセスを合理化し、テストカバレッジを改善し、テストスイートをより保守しやすく効率的にするのに役立ちます。
以上がGoでユニットテストをどのように書きますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。