[Django]テストコードで外部 API のモックを作成する

Django Logo プログラミング

Django で開発をしているときに、テストコードを作成することがあると思いますが、外部の API などを呼び出している時のテストコードの実装方法について、忘れないようにメモしておきます。

開発環境

  • Django : 2.x
  • Python : 3.x

モックの作成

テストコード実行時に、外部 API の呼び出しの代わりになるモックを作成します。

# mock.py
class MockApi:
    def api_mock(self):
        return True

ここではとりあえず、モック実行時に「 True 」を返す関数を作成しました。戻り値については、外部APIの種類に応じて変更していけば良いです。

一覧取得する API なら配列を返すようにするとか・・・

テストコードを実装する

実際にモックを利用したテストコードを実装していきます。

from django.test import TestCase
from unittest.mock import patch
from project.app.mock import MockApi

class SampleTests(TestCase):
    @patch('project.app.file.class.method', MockApi.api_mock)
    def test_sample(self):
        # ここには普通に外部APIを実行しているコードのテストを実装します

ここで重要なのは、「 patch 」デコレータです。このデコレータに、外部 API を実行している関数とそれを置き換えるモックの関数をパラメータとして設定することで、テストコード実行時に外部 API の代わりにモックを実行してくれるようになります。

最後に

最近は様々な外部システムと連携しないといけない開発が増えてきたので、テストコードを実装する際には外部 API をモックに置き換えてテストすることで品質の担保もやりやすいかと思います。また、外部 API からの例外系のテストもこのモックを使えば簡単にできるので、そこもメリットではないかと・・・。外部のシステム実行した時に、わざと例外発生させるとかできませんしね。

コメント

モバイルバージョンを終了
タイトルとURLをコピーしました