トーク

Go1.25新機能 testing/synctest で高速&確実な並列テストを実現する方法
Room 1 10:20 - 11:00
## 概要
Go1.25で標準パッケージになった testing/synctest パッケージを中心に、Test と Wait の2つの API の動作仕様を詳解します。実コードと GoDoc を交え、時間短縮・flaky対策の実用的なテスト手法を初学者から中級者に向けて丁寧に紹介します。また実際に弊社のテストコードに組み込んだ結果も合わせて共有できればと思います。
## 発表内容の詳細
1. 背景と課題提起
- 並列テストの“遅さ”や“flakiness”という実務課題
2. API紹介
- `testing/synctest.Test`
- `testing/synctest.Wait`
3. 実験コード解説
- 実験 1: TTLを持つキャッシュのテスト
- 実験 2: goroutineによるexpire実装の検証
4. 動作検証とGoDoc読解
- GoDocベースで仕様確認+内部動作の理解
6. flakyテストへの対処
- `Test`を使った安定化手法とその根拠
7. Goクイズ・参加型検証
- ミニクイズ形式で仕様の理解を補強
8. 実務適用と今後の展望
- 弊社での活用事例
- `synctest` の今後への期待
9. APIの内部実装
- synthetic timeの実装やgoroutine制御の仕組み
## 補足事項
- https://zenn.dev/canary_techblog/articles/ec8a96b4541685 をベースにした発表になります
- 上記の記事執筆時はGo1.24で実験的に導入された時だったので、Go1.25で標準パッケージに入るまでのアップデート(e.g. RunがTestに置き換わった理由など)も併せてお話しする想定です
- 弊社での活用事例のセクションでは、exponential backoffでリトライするようなAPIのテストなどより実践的に使える内容についてもお話しできればと思っています
- またsynthetic timeの実装やgoroutine制御の仕組みについても余裕があればお話ししたいと思います