見出し画像

自分が書いたプログラムをテストするーUnittestモジュールー

今日は、『独習Python入門』第8章で学んだことのアウトプットです。

ユニットテスト(単体テスト)

プログラムをテストするプログラムにおいては、そのプログラムで利用されている関数をテストするのが基本です。(中略)このプログラム自体のテストのことを単体テスト(ユニットテスト)と言います。関数を最小処理単位として扱い、「戻り値」と想定される「期待値」の2つを比較して、意図された結果になっていることで正しいかどうかを判断します。

おお。ユニットテストという言葉自体は訊いたことがあったけど、関数を最小処理単位として扱うのかぁ。

Unittestモジュール

Pythonにはユニットテストをサポートするモジュールが用意されています。Unittestモジュールです。

import unittest

# テスト対象のfizzbuzz関数
def fizzbuzz(a):
   if a % 15 == 0:
       return 'FizzBuzz'
   elif a % 3 == 0:
       return 'Fizz'
   elif a % 5 == 0:
       return 'Buzz'
   else:
       return a

class FizzBuzzTest(unittest.TestCase):
   # テストプログラム
   def test_fizzbuzz(self):
       self.assertEqual('Fizz', fizzbuzz(3))
       self.assertEqual('Buzz', fizzbuzz(5))
       self.assertEqual('FizzBuzz', fizzbuzz(15))
       self.assertEqual(16, fizzbuzz(16))

if __name__ == "__main__":
   unittest.main()
テストを実行するプログラムをつくるのにあたり、2つ守らねばならないことがあります。
1. unittestモジュールのTestCaseクラスを継承すること
2. テストを実行する関数は、test_で始まる名前を付けること
「class UnitTest(unittest.TestCase)」で1のルールを守っています。クラス名は何でもOKですが、Testをクラス名に含み入れるのが通例です。

FizzBuzzTestクラスの関数名を、「test_fizzbuzz」にすることで2のルールを守っています。test_から開始されないものはテストを実行するものではないとみなされ、テスト対象から外されます。

最後の「if__name__」から始まる一文はコマンドプロンプトからこのプログラムを実行されたときにTrueとなります。(中略)他のPythonプログラムから呼び出すことを禁じたいケースもあります(後略)

条件分岐のテスト

原則として、条件分岐のテストにおいては、分岐した数だけ分岐によって実行される処理が正しいかどうかを確認する必要があります。
分岐したことで戻り値が変わる場合は必ずすべての分岐を通したテストを実行してください。

これからは、テストプログラムを書くことも練習していきたいなあ。

サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪