2026/05/23
testify v2 見てみた
go のオールインワンテスティングフレームワークと言えば testify だと思う。ずいぶん昔から v2 の話が出ていたと思うが、なんかリポジトリを見かけたので中身を覗いてみた。
https://github.com/go-openapi/testify
READMEからの抜粋
- https://github.com/stretchr/testify からの fork (そらそう)
- 見た時点で
224 commits ahead of and 36 commits behind stretchr/testify:master - README には 95% compatible とあるので v1 との差分は 5%程度らしい
- 外部依存無し
- difflib や spew はリポジトリに取り込まれている
- tools 配下で単独モジュールとしても使えるようになっている
- assert/require のインターフェースは同じ
- go1.25でモダナイズされてる
- mock はなくなってる
- goroutine leakの検出ができる
- File descriptor leakの検出もできる
- ジェネリクスを使った Type-safe assertionができる
- 非同期の assertionが安全になったらしい
- ドキュメント頑張ってる
- stretchr/testify の import pathを期待してるツールとは相性悪い(testifylintとか)
自分が気づいた点
- EXAMPLE での got/expected が result/expected というワーディングになってる
- benchmarkがけっこうされてる(v1でもある?)
- fail report に色付けるようになってそう
- CodeQL とか導入されてる
- AGENTS.md, .claude はじめ、AI integrationがけっこうされてる
- 根本的にテスト関数の名前とインターフェースはそのままなのね、、
testify はアサーションライブラリで、分野ではもっとも普及してるのではないかと思うテスティングライブラリなわけですが、まあ、go ではアサーションライブラリ自体が否定されがちだったりもするのですが、go でそこそこの規模のチーム開発やっててエンジニア同士の育ってきた環境も言語も違いますみたいなときに生産性を鑑みるとショートカットが欲しくなって導入するやつだと思うので、go1.25+という判断は妥当だなあと思う。testify導入するような多くのプロダクトは最新に近い go version に追従しているだろうし、低いバージョンのサポートが必要なライブラリ系のテストで testify 使うとはあんまり思わない(偏見)。あと、mock を取り除いたのもそうなるよねーという気がする。mock単独ライブラリが他にあるし、interface で挿げ替えてるだろうし。
取り急ぎ、以下の点は深掘りして actually にも取り込む検討をする。
- goroutine leakの検出ができる
- File descriptor leakの検出もできる
- ジェネリクスを使った Type-safe assertionができる