Python_単体テストの作成と実行

unittestについて

unittest とは

Pythonでユニットテストを行うにはunittestモジュールを利用することが一般的です。


unittestの最小構成のテストケース

最小構成のテストケースは以下の通りです。


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# vim:fileencoding=utf-8
# coding=utf8


import unittest

class UnitTest(unittest.TestCase):
    def test1(self):
        self.assertEqual(1, 1)


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

評価を実行するには、スクリプトを実行します。


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

OK

unittestの作成

unittestのメソッド

asset系メソッドが下記のように用意されています。


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# vim:fileencoding=utf-8
# coding=utf8


import unittest


class UnitTest(unittest.TestCase):
    def test1(self):
        self.assertEqual(1, 1)                  # a == b
        self.assertNotEqual(1, 2)               # a != b
        self.assertTrue(1 == 1)                 # bool(x) is True
        self.assertFalse(1 == 2)                # bool(x) is False
        self.assertIs(self, self)               # a is b
        self.assertIsNot([1, 2, 3], [1, 2, 3])  # a is not b
        self.assertIsNone(None)                 # x is None
        self.assertIsNotNone((1, 2, 3))         # x is not None
        self.assertIn(3, [1, 2, 3])             # a in b
        self.assertNotIn(4, [1, 2, 3])          # a not in b
        self.assertIsInstance("a", str)         # a is instance of b
        self.assertNotIsInstance("a", int)      # a is not instance of b


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


初期化時と終了時

テスト実行前・実行後に実行する処理を定義できます。


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# vim:fileencoding=utf-8
# coding=utf8


import unittest

def setUpModule():
    print('setUpModuleはTest全体初期化時に実行します。')

def tearDownModule():
    print('tearDownModuleはTest全体終了時に実行します。')

class UnitTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print('setUpClassはテストケース初期化時に実行します。')

    @classmethod
    def tearDownClass(cls):
        print('tearDownClassはテストケース終了時に実行します。')

    def setUp(self):
        print('setUpはテスト初期化時に実行します。')

    def tearDown(self):
        print('tearDownはテスト完了時に実行します。')

    def test1(self):
        print('test1を実行します。')
        self.assertEqual(1, 1)

    def test2(self):
        print('test2を実行します。')
        self.assertEqual(1, 1)


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

関連ページ