Python標準モジュール【unittest】の使い方

unittestって?

unittestは自身の書いたコード(関数)をテストするためのpython標準モジュールです。

書いた関数の戻り値と、期待値を比較して想定している結果となっているかを判断してくれる便利なモジュールです。

pythonに標準でインストールされているので、import unittestですぐに使用可能です。

参考サイト:26.4. unittest — ユニットテストフレームワーク

使い方

pythonドキュメントに記載されていたサンプルスクリプトを例に取ってみましょう。

import unittest

class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())

    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])
        with self.assertRaises(TypeError):
            s.split(2)

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

上から順に
①unittest モジュールのimport

②unittest.TestCaseを継承したクラスTestHOGEの作成

(必須では無いが、慣例としてクラスの頭にはHOGEをつける)

③テストを行いたいメソッドの頭にtest_をつける。これによってテストを行うメソッドが検索されるため必ずつける。

④assert文を用いて想定した結果と実行した結果を比較します。代表的なassert文には以下のようなものがあります。

assertEqual(a , b)  a == b(aとbがイコールかどうか)
assertNotEqual(a , b)   a != b(aとbがイコールではないかどうか)
assertTrue(x)   x == True(xがTrueを返すかどうか)
assertFalse(x)  x == False(xがFalseを返すかどうか)
assertRaises(HogeError) 想定したエラーが発生するかどうか

⑤以下の記述で書いたテストを実行

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

以上でunittestモジュールによるテストを実行できます。

詳しくは上記の参考サイトをご覧ください。

補足

# upper()メソッド:文字列を全て大文字にする

>>>"abc".upper()
"ABC"

# isupper()メソッド:全てが大文字かどうか判定する

>>>"Abc".isupper()
"False"

>>>"ABC".isupper()
"True"

# split()メソッド:文字列を引数に取った記号で分割し、リストにする
# 引数に何も指定しない場合はスペースやタブで自動的に分割

>>>a = "orange,apple,banana"

>>>a.split(",")
>>>[orange, apple, banana]