go test vs Testify: CIでGoコードをテストする方法
両者はライバルではありません。go testは組み込みのrunnerで、Testifyはその上にassertionとmockを追加するライブラリです。
go testはtestingパッケージを使うGoの標準的な組み込みテストランナーです。Testifyは、表現力豊かなassertion、requireスタイルのチェック、suite、mockingを追加する人気のサードパーティライブラリで - すべてgo testによって実行されます。
| go test (stdlib) | Testify | |
|---|---|---|
| 役割 | 組み込みのテストランナー | その上のassertion/mockライブラリ |
| Assertion | 手動 (if + t.Errorf) | assert / require ヘルパー |
| Mocking | 手作り / インターフェース | mockパッケージ |
| Suite | 素の関数 | suiteパッケージ |
| 実行方法 | go test | go test (変わらず) |
CIでの挙動
CIでは常にgo testを実行します。問題はTestifyを追加するかどうかです。標準ライブラリはテストを依存関係なしで慣用的に保つため、多くのGoチームがこれを好みます。Testifyは読みやすいassertionと組み込みのmockingでボイラープレートを減らし、大きなコードベースのテスト作成を高速化します。どちらも同じgo testの出力を生成し、coverageや-raceと統合します。
速度と信頼性
CIでgo test -raceを使ってdata raceを検出し、build/module cacheをcacheして高速なセットアップを実現し、一過性の失敗を再試行できるよう計画しましょう。大きなGoテストマトリクスは、より高速なマネージドrunnerで早く終わります。
結論
依存関係ゼロで慣用的なstdlibのテストが欲しいなら: 素のgo test。より少ないボイラープレートで簡潔なassertion、suite、mockが欲しいなら: Testifyを追加 (それでもgo testで実行されます)。両者は競合するのではなく補完し合います。
関連ガイド
How to Cache Dependencies in GitHub Actions (Every Ecosystem)Cache dependencies in GitHub Actions with actions/cache - correct keys and paths for npm, yarn, pnpm, pip, Ma…
Self-Healing CI: Containing Flaky Tests Without Hiding Real BugsFlaky tests fail intermittently with no code change. Learn how to identify them and how self-healing CI retri…
How to Speed Up GitHub Actions: 9 High-Impact TacticsMake GitHub Actions faster: caching, parallelization, test splitting, Docker layer caching, slimmer images, a…