unittestの練習

もはや、スクリプト言語にとってテストクラスの作成は避けて通れません。

JavaにJUnitが、RubyにTestUnitがあるように、Pythonにもunittestというモジュールが用意されています。

今回は、unittestを使ったテストクラスを書いて、来たるべき日(いつだ?)に備えたいと思います。

最初のテストクラス

『パーフェクトPython』にはstrクラスのjoinメソッドをテストする例がありますが、まったく同じでは進歩がないので、ここではリストのsortメソッドをテストするクラスを書いてみます。

(テストスクリプト) list_test.py

import unittest

class MyTests(unittest.TestCase):
    def test_sort(self):
        lang = ["Python", "Ruby", "Perl", "BASIC", "Fortran", "COBOL"]
        lang.sort()
        self.assertEqual(lang,
                         ["BASIC", "COBOL", "Fortran", "Perl", "Python", "Ruby"])

self.assertEqualの第一引数に実際の値、第二引数に期待する結果を指定します。
RubyのTest::Unitでは、assert_equalの第一引数が期待する結果、第二引数が実際の値になっていて、反対になっています。
まあ、どちらを先にしても特に重大な問題を引き起こすということはないと思います。

テストクラスを作ったら実行します。

$ python3 -m unittest list_test.py
$ py3 -m unittest list_test.py
.
-----------------------------------------------------------------------
Ran 1 test in 0.001s

OK

-m unittestをつけないと、うんとむすんとも言わないので注意。
あるいは、テストクラスの最後に以下のコードを追加して実行します。

(追加コード)

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

(実行)

$ python3 list_test.py

Pythonの組み込みクラスなので、当然テストは合格しました。

参考文献

入門Python 3 (オライリー)
パーフェクトPython (Pythonサポーターズ 著)

参考サイト

unittestのマニュアル

Pythonプログラミング物語 © 2016 Frontier Theme