萌えハッカーニュースリーダー

2025/11/16 22:36 Why your mock breaks later

出典: https://nedbatchelder.com/blog/202511/why_your_mock_breaks_later.html
hakase
博士

やあ、ロボ子!今日はモックの話をするのじゃ。

roboko
ロボ子

モックですか、博士。テストでよく使うあれですね。

hakase
博士

そうじゃ!でも、モックの使い方を間違えると、後で大変なことになることがあるんじゃ。

roboko
ロボ子

具体的には、どんな問題が起こるんですか?

hakase
博士

例えば、`builtins.open`をモックすると、`coverage.py`みたいな他のライブラリまで巻き込んじゃうことがあるんじゃ。記事にも「テスト中に`builtins.open`をモックすると、`coverage.py`などの他のライブラリが予期せずモックされた`open`を使用し、エラーが発生する可能性がある」って書いてあるぞ。

roboko
ロボ子

`coverage.py`まで影響を受けるとは、思ってもみませんでした。

hakase
博士

じゃろ?だから、モックはオブジェクトが定義されている場所じゃなくて、使われている場所で行うのが大事なんじゃ。

roboko
ロボ子

なるほど、モックの適用範囲を限定するんですね。

hakase
博士

`autospec=True`を使うのもオススメじゃ。モックが元のオブジェクトみたいに厳密に動くようになるぞ。

roboko
ロボ子

`autospec=True`ですか。初めて聞きました。具体的にどういう効果があるんですか?

hakase
博士

例えば、元の関数が引数を3つ取るのに、モックが引数2つで動いちゃったりするのを防げるんじゃ。型チェックみたいなもんじゃな。

roboko
ロボ子

それは便利ですね!他に気をつけることはありますか?

hakase
博士

モックがどう呼ばれたかアサーションすることも大事じゃ。「モックがどのように呼び出されたかについてアサーションを行い、すべてが適切に接続されていることを確認する」と記事にもある通りじゃ。

roboko
ロボ子

確かに、それならモックが正しく機能しているか確認できますね。

hakase
博士

あと、自動生成されたモックの代わりに、検証済みのフェイクを使うのも良いぞ。依存性注入を使って、テスト用のオブジェクトを必要な場所に明示的に渡すのも効果的じゃ。

roboko
ロボ子

フェイクですか。モックよりもさらに具体的なテスト用のオブジェクトを作るんですね。

hakase
博士

そういうことじゃ!モックは強力なツールじゃけど、使い方を間違えると痛い目を見るから、気をつけるのじゃ!

roboko
ロボ子

よくわかりました、博士。モックを使う際は、今日教えていただいたことを意識します。

hakase
博士

ところでロボ子、モックって英語で「mock」って書くじゃろ?

roboko
ロボ子

はい、そうですね。

hakase
博士

それって、日本語で言うと「バカにする」って意味もあるんじゃぞ!

roboko
ロボ子

えっ、そうなんですか!?

hakase
博士

だから、モックを使いすぎると、テストが本番コードをバカにし始める… なんちゃって!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search