最終更新
リンドくん
たなべ先生、テストを書く時に外部APIを呼ぶ処理があると、テストが遅くなったり失敗したりするんですけど...
たなべ
それは「モック(Mock)」という技術で解決できるよ!
外部の依存関係を「偽物」に置き換えることで、テストを高速で安定的に実行できるようになるんだ。
プログラミングでテストを書いていると、必ず出会うのが「外部依存」の問題です。
外部API、データベース、ファイルシステムなどに依存するコードをテストしようとすると、以下のような問題が発生します。
そこで登場するのが「モック(Mock)」という技術です。
Pythonではunittest.mockという標準ライブラリを使って、外部依存を「偽物」に置き換えることができます。
この記事では、初心者の方でも理解できるよう、unittest.mockの基本的な使い方を実例とともに解説していきます。
HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。
✓ 質問し放題
✓ β版公開中(2025年内の特別割引)
リンドくん
「モック」って具体的には何をするものなんですか?
たなべ
簡単に言うと、本物の代わりに使う偽物だね。
映画撮影で本物のダイヤモンドの代わりに偽物を使うのと同じようなものだよ。
モック(Mock)とは、テスト時に実際のオブジェクトや関数の代わりに使用する「偽物」のことです。
例えば、以下のような外部APIを呼ぶ関数があるとします。
このcheck_weather_alert関数をテストしたい場合、毎回実際のAPIを呼び出すのは現実的ではありません。そこでモックを使います。
まずは最も基本的な使い方から見てみましょう。
実際の関数をモックに置き換えるには@patchデコレータを使います。
より実践的な例として、外部APIを使うユーザー管理システムのテストを見てみましょう。
このクラスのテストコードは以下のようになります。
リンドくん
モックを使う時に気をつけることはありますか?
たなべ
そうだね、使いすぎに注意が一番大切かな。
外部依存だけをモックして、自分のロジックはしっかりテストするのがポイントだよ。
1. 外部依存のみをモックする
2. 実際のレスポンス形式に合わせる
3. モックの呼び出しを検証する
間違い1 モックの設定し忘れ
間違い2 パッチ対象の指定ミス
リンドくん
モックの使い方がよく分かりました!さっそく自分のコードでも試してみます。
たなべ
それは良いね!最初は外部API呼び出しを一つモックするところから始めてみて。
慣れてきたら徐々に複雑なケースにも挑戦していこう。
この記事では、Pythonのunittest.mockを使った外部依存のモック方法について解説しました。
重要なポイント
モックを使ったテストは、最初は複雑に感じるかもしれませんが、慣れてくると開発効率が劇的に向上します。
ぜひ今日から、自分のプロジェクトでunittest.mockを使ったテストを書いてみてください。
外部サービスに依存しない安定したテストで、より安心してコードを書けるようになるはずです!