Skip to content
Latchkey

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 testgo 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で実行されます)。両者は競合するのではなく補完し合います。

関連ガイド