Python
Python2

pythonで関数が呼ばれることをテストする方法

こんなプログラムがあったとして、print_high_scoreの入力値のscoreが80以上の場合にprint_scoreが呼ばれる事をテストする方法を紹介します。

def print_score(score):
    print "score is {}".format(score)


def print_high_score(score):
    if score >= 80:
        print_score(score)

呼ばれるかテストしたい関数をmock化し、そのmockが呼ばれたかをassertすることで、関数が呼ばれるかどうかのテストを実現することができます。

実際のコードは次の通り

# coding:utf-8
# !/usr/bin/python
import unittest
from mock import patch


def print_score(score):
    print "score is {}".format(score)


def print_high_score(score):
    if score >= 80:
        print_score(score)


class Test_ShowHighScore(unittest.TestCase):
    @patch("__main__.print_score")
    def test_print_high_score_over_80(self, mock):
        print_high_score(80)
        self.assertTrue(mock.called)

    @patch("__main__.print_score")
    def test_print_high_score_less_than_80(self, mock):
        print_high_score(79)
        self.assertFalse(mock.called)


if __name__ == "__main__":
    unittest.main()