Pythonのユニットテストツールである unittestをいじって見たのでご紹介.

最も簡単な例

以下に、シンプルなテスト実行手順を書く.

  • unittestライブラリをインポート
  • unittest.TestCaseを継承したクラスを作成
  • test_のプレフィクスをもつメソッドを作成
  • self.assertEqualでテストアサーションを宣言
  • 末尾に unittest.main()を書く

コード: test_hello.py

import unittest

class TestHelloUnitTest(unittest.TestCase):

    def test_add(self):
        actual = 1 + 1
        expected = 2
        self.assertEqual(expected, actual)

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

実行結果

$ python test_hello.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

詳しい説明

アサーション

アサーション関数は以下が用意されている. どれもassertXXXXという形をしているが、Equalさえしっていれば大抵はOK.

  • assertEqual(a, b)
  • assertNotEqual(a, b)
  • assertTrue(x)
  • assertFalse(x)
  • assertIs(a, b)
  • assertIsNot(a, b)
  • assertIsNone(x)
  • assertIsNotNone(x)
  • assertIn(a, b)
  • assertNotIn(a, b)
  • assertIsInstance(a, b)
  • assertNotIsInstance(a, b)

前処理と後処理

各テストの前処理でしたいことがあるときは、setUpメソッドに処理を書く.

各テストの後処理でしたいことがあるときは、tearDownメソッドに処理を書く.

class TestHelloUnitTest(unittest.TestCase):
   def setUp(self):
        pass

   def tearDown(self):
        pass

テストケース、メソッド指定でのテスト

テストケース(クラス)を指定して、実行したいときは、以下ののようにして書く.

$ python -m unittest スクリプト名.テストケース名

メソッドを指定したいときは、以下.

$ python -m unittest スクリプト名.テストケース名.メソッド名

Emacsならメソッド指定でテストできるよ!

Emacs を利用すれば、メソッド単位で簡単テスト実行可能.

実行したいテストケースの上で M-x python-test-function .

以上、Happy Hacking!!