トランザクションモックのテストヘルパーはコールバックのエラーを伝播させる版を必ず用意する
Go
mockery
テスト
知識
運用
RunInTx(ctx, opts, fn) のようなトランザクション抽象をモックする際、「fn を実行して常に nil を返す」ヘルパーだけだと、トランザクション内部の失敗分岐(楽観ロック失敗・一意制約・二重使用検知など)のテストが偽陰性になる。fn が返したエラーがモックで握りつぶされ、呼び出し元には成功として返るため、「エラーになるはず」のテストが「エラーが返らない」で落ちる(または逆に、アサーションが甘いと通ってしまう)。
対処: fn の戻り値をそのまま返すヘルパーを別に用意し、Tx 内の失敗系をテストするときはそちらを使う。
go
// 成功固定(Tx内のエラーを検証しないテスト用)
On("RunInTx", ...).Run(func(args){ _ = fn(ctx) }).Return(nil)
// エラー伝播(Tx内の失敗分岐を検証するテスト用)
On("RunInTx", ...).Return(func(ctx, opts, fn) error { return fn(ctx) })気づき方: 「Tx 内で early return するはずの異常系テストで err が nil になる」場合、まずトランザクションモックがエラーを伝播しているか確認する。mockery 等の生成モックは関数リターナー(.Return(func(...) error))に対応しているので、伝播版は1行で書ける。
適用条件: トランザクション境界をインターフェースで抽象化し、クロージャを渡す設計(Go の RunInTx、TypeScript の prisma.$transaction 相当)でモックテストをしている場合全般。