Python

Pythonのunittest.Mockでスタブを作って単体テストする

tender6admin ・ 約1分

概要

  • 自作クラスに対して、unittest.mock.MagicMockを使ってモックを作成してテストする。

サンプルコード(挨拶を返すプログラムとテストコード)

(テストしたいファイル。ランダムで挨拶の語を選んで、挨拶文を返す)

# greeting.py
import random
class Greeting():    def greeting_phrase(self, name):        grt = self.greeting_word()        result = f'{grt}! {name}.'        print(result)        return result
    def greeting_word(self):        grt = ['Hello', 'Bonjour', 'Konnichiwa']        i = random.randint(0, len(grt) - 1)        return grt[i]

(テストコード。unittest.mock.MagicMockを使ってモックを作成してテストする)

# test_greeting.py
from unittest import TestCasefrom unittest.mock import patch, MagicMockfrom greeting import Greeting
class TestGreeting(TestCase):    def test_greeting_phrase(self):        grt_mock = MagicMock()        grt_mock.return_value = 'Hi'    # 挨拶の語を「Hi」に置き換える

補足

  • 自作クラスのメソッドを置き換える場合、単にメソッド名だけでなく、長い名前でフルで指定する。
    • 別フォルダ内にある.pyファイルに書かれているクラスをテストする場合に注意が必要。
  • クラス名など命名規則はPEP8をよく読む。

参考