Googleでの2つ目のプロジェクトで、モックを使う気が完全になくなったんだ。それ以来、ほとんどやってない。2つのことが起きたんだけど、まず1つ目は、何かの書き直しをしてた時に(GWTを使ってたし、もう10年以上前の話)、テストカバレッジやテスト要件をたくさん持つことになったんだ。まあ、それ自体はいいんだけど、強制的に実施されて、みんな自分のサービスをテストして、モックをDIでたくさん入れてた。結果は完全に予想通りで、システム全体がすごく脆弱になって、8週間しか存在しなかったサービスがレガシーコードみたいに振る舞ってた。バックエンドサービスを切り替えたり、呼び出しの順番を変えたり、特定のサービスを予想以上に呼び出したりするだけで、30分の変更のためにテストのモックを直すのに半日かかることもあった。ほんとにひどかったし、時間の無駄だった。DIの部分もひどくて、全部Guiceを使ってて、モジュールがモジュールをインストールするような感じで、テスト環境でモックを返すように修正するのは大変だった。結局、テストコードと本番コードで異なる環境(とインジェクター)になることが多くて、何をテストしてるのか分からなくなる。2つ目は、その頃、会社のJavaエンジニアたちがEasyMockとMockitoのどちらを使うか決めるために大規模な無駄遣いをしてたんだ。どちらの利点がどうこう言っても、実際にはそれほど違いはないし、既存のコードでモックフレームワークを完全に変更する価値はない。これにどれだけのエンジニアの時間が無駄になったか分からない。モックは悪い習慣を助長して、偽の安心感を与えるだけ。解決策は、最小限の正しい動作を持つダミーのサービスやインターフェースを作ることだよ。たとえば、IDに対する権限やメタデータを簡単に調べるダミーのアイデンティティサービスがあるとする。それがテストのために必要なもので、モックでやるのは本当に間違ってる。以来、モックはほとんど使ってないし、モックやモックフレームワークに強い意見を持ってる人を見ると、すごく警戒するようになった。