23.3.1 基礎的な例

unittestモジュールには、テストの開発や実行の為の優れたツールが 用意されており、この節では、その一部を紹介します。ほとんどのユーザとって は、ここで紹介するツールだけで十分でしょう。

以下は、randomモジュールの三つの関数をテストするスクリプトです。

import random
import unittest

class TestSequenceFunctions(unittest.TestCase):
    
    def setUp(self):
        self.seq = range(10)

    def testshuffle(self):
        # make sure the shuffled sequence does not lose any elements
        random.shuffle(self.seq)
        self.seq.sort()
        self.assertEqual(self.seq, range(10))

    def testchoice(self):
        element = random.choice(self.seq)
        self.assert_(element in self.seq)

    def testsample(self):
        self.assertRaises(ValueError, random.sample, self.seq, 20)
        for element in random.sample(self.seq, 5):
            self.assert_(element in self.seq)

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

テストケースは、unittest.TestCaseのサブクラスとして作成します。メ ソッド名が"test"で始まる三つのメソッドがテストです。テストランナー はこの命名規約によってテストを行うメソッドを検索します。

これらのテスト内では、予定の結果が得られていることを確かめるために assertEqual()を、条件のチェックにassert_()を、例外が発 生する事を確認するためにassertRaises()をそれぞれ呼び出していま す。assert文の代わりにこれらのメソッドを使用すると、テストラン ナーでテスト結果を集計してレポートを作成する事ができます。

setUp()メソッドが定義されている場合、テストランナーは各テストを 実行する前にsetUp()メソッドを呼び出します。同様に、 tearDown()メソッドが定義されている場合は各テストの実行後に呼び 出します。上のサンプルでは、それぞれのテスト用に新しいシーケンスを作成するため にsetUp()を使用しています。

サンプルの末尾が、簡単なテストの実行方法です。unittest.main()は、 テストスクリプトのコマンドライン用インターフェースです。コマンドラインか ら起動された場合、上記のスクリプトから以下のような結果が出力されます:

...
----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK

簡略化した結果を出力したり、コマンドライン以外からも起動する等のより細かい 制御が必要であれば、unittest.main()を使用せずに別の方法でテストを 実行します。例えば、上記サンプルの最後の2行は以下のように書くことができ ます:

suite = unittest.TestLoader().loadTestsFromTestCase(TestSequenceFunctions)
unittest.TextTestRunner(verbosity=2).run(suite)

変更後のスクリプトをインタープリタや別のスクリプトから実行すると、以下の 出力が得られます:

testchoice (__main__.TestSequenceFunctions) ... ok
testsample (__main__.TestSequenceFunctions) ... ok
testshuffle (__main__.TestSequenceFunctions) ... ok

----------------------------------------------------------------------
Ran 3 tests in 0.110s

OK

以上がunittestモジュールでよく使われる機能で、ほとんどのテスト ではこれだけでも十分です。基礎となる概念や全ての機能については以降の章を 参照してください。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。