Golang 単体テストの実行を高速化するには、次の措置を講じることができます: 1. 複数のテストを同時に実行するために並列テストを実行します。 2. テスト データを再利用して、データの作成と初期化のオーバーヘッドを削減します。不正確さを避けるためのモックによる依存関係。 4. ベンチを使用して、最も長い実行時間のかかるテストを見つけて最適化します。
Golang 単体テストの実行を高速化するにはどうすればよいですか?
Golang の単体テストは強力ですが、実行速度が遅く、開発効率に影響します。この記事では、テストの実行を高速化し、開発プロセスを最適化するためのいくつかの方法を紹介します。
1. 並列テスト
Go は 1.18 から並列テスト、つまり複数のテストを同時に実行することをサポートしています。これは、大規模なプロジェクトの場合に特に有益です。
package main import ( "testing" "sync" ) // TestParallel runs tests in parallel using the t.Parallel() function. func TestParallel(t *testing.T) { // Create a channel to signal completion. done := make(chan struct{}) defer close(done) // Create a wait group to track running tests. var wg sync.WaitGroup // Start multiple test goroutines. for i := 0; i < 10; i++ { wg.Add(1) go func(i int) { defer wg.Done() t.Run("Test"+strconv.Itoa(i), func(t *testing.T) { // Your test code here time.Sleep(100 * time.Millisecond) }) }(i) } // Wait for all tests to complete before returning. go func() { wg.Wait() close(done) }() <-done // Block until all tests have finished. }
2. テストデータを再利用する
事前にテストデータを作成して再利用すると、テストの実行時間を短縮できます。
package main import ( "testing" "sync" ) var testData map[string]interface{} var testDataLock sync.RWMutex // TestDataSetup runs once before all tests and creates test data. func TestDataSetup(t *testing.T) { testDataLock.Lock() defer testDataLock.Unlock() if testData == nil { // Create and initialize test data here. } } // TestExample runs a test using the shared test data. func TestExample(t *testing.T) { TestDataSetup(t) // Ensure test data is available before each test. // Use testData in your test code. }
3. モック
依存関係をモックすることで外部呼び出しをシミュレートし、ボトルネックを排除します。
package main import ( "testing" ) type MyInterface interface { DoSomething() } type MockMyInterface struct { DoSomethingCalled bool } func (m *MockMyInterface) DoSomething() { m.DoSomethingCalled = true } // TestExample uses a mocked dependency to speed up testing. func TestExample(t *testing.T) { mock := &MockMyInterface{} // Pass mock to your code under test. // Assertions using mock.DoSomethingCalled to verify behavior. }
4. ベンチベンチ
ベンチベンチを使用して、実行に最も時間がかかるテストを見つけて最適化します。
りー以上がGolang 単体テストの実行を高速化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。