生成モックを参照するコードが未生成状態で残っていると mockery 自体が回らない — 参照側の一時退避でブートストラップを解く
Go
mockery
テスト
知識
運用
mockery v3 系は生成時に対象パッケージ群を型チェック付きでロードするため、リポジトリ内に「これから生成するモック」を import するファイル(テストヘルパー・mock セットアップの集約など)が先に存在すると、パッケージロードが壊れて生成コマンド自体が失敗する chicken-and-egg になる。
発生条件と症状
- 既存リポジトリの copy+rename 移植で、モック参照側のヘルパー群を先にコピーし、mocks ディレクトリは再生成する前提で持ち込まなかったとき。
- 生成物ディレクトリを VCS 管理外にしていて、クリーン checkout から再生成する運用でも同型で起きる。
- 症状は mockery 実行時のパッケージロード失敗(mocks パッケージが見つからない旨のコンパイルエラー)で、生成すれば直る対象が生成を妨げる。
回避と予防
- 回避: モックを参照するファイルを一時的にビルド対象外へ退避(パッケージ外への移動など)して mockery を実行し、生成後に戻す。
- 予防: ブートストラップ順序を「インターフェース定義 → mockery 生成 → 参照ヘルパーの移植」にすると退避自体が不要になる。移植作業を AI に任せる場合も、この順序を指示に含める価値がある。
検証
退避 → 生成 → 復元の後に、全パッケージのビルドと vet が通ること(退避漏れ・戻し漏れの検出)を確認する。