Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Goのテスト ケースは逐次、テストは並列

Mitsuhiro Okada
August 23, 2024
49

Goのテスト ケースは逐次、テストは並列

・自己紹介
・テストが「CIでは通る」が「ローカルで通らない」
・実装しているテストの例
・問題のあったテストの例
・何が問題だったか
・具体的な実装の例
・まとめ
---
Goのテストは、並列に実行される
Goのテストケースは、逐次実行される
defer は、関数の最後に実行される
lockの解除タイミングを誤ると処理がぶつかることがある。

Mitsuhiro Okada

August 23, 2024
Tweet

Transcript

  1. 4 自己紹介 • 岡田光博(みつ) • 現在は、新規プロダクトでバックエンド!(4月〜) ◦ もともとは、フロントエンド(インターン) • 趣味

    ◦ カメラ ◦ 音楽(最近は、R&B) ◦ 食べ飲み歩く(三茶の混混ってところおすすめ) • アイスブレイク
  2. 13 何が問題だったか • defer は、関数の最後に実行される • patch() と unpatch() は内部でmutexのlockを使っている

    • テストケースは逐次実行されるが、 Test_XXXは、並列に実行される • Test_XXX() とその他の Testが一緒に走り、unlock 前に次の lock をかけようとした ↓ • 本来、よりスコープの狭いt.Run内のコールバック関数で patch() の unpatch()(mutex のlock解除)を実行しないといけない