##
5.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.TestSuite()
    suite.addTest(unittest.makeSuite(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`モジュールでよく使われる機能で、ほとんどのテスト ではこれだけでも十分です。基礎となる概念や全ての機能については以降の章を 参照してください。