Python、テスト用ライブラリの紹介
プログラミングにおいて、テストが大事なのは言うまでもありません。「テスト駆動開発」という開発手法がありますが、この方法に従う・従わないにせよ、テストを書くことはベストプラクティクスの一つです。Pythonではテストを助けるためのライブラリが豊富にありますが、その中から3つを紹介します。
標準ライブラリ
Battery Included(バッテリー同胞)の考えがあるPythonでは、多種・多機能なライブラリ群が標準で付属しています。テストについても例外でなく、2つの優秀なライブラリを使うことが可能です。
unittest
Javaの「JUnit」に触発されたもので、他言語でも似たようなユニットテストフレームワークが多く存在します。unittest.TestCaseを継承したクラスを作成し、test_spamのような、「test」でメソッドを定義するだけです。以下は、ある関数(is_factor)が正しく動作するかをチェックするサンプルです。
# mymath.py def is_factor(a, b): """aがbの約数ならTrueを返す""" if b % a == 0: return True else: return False
# test.py import unittest from mymath import is_factor class TestMethods(unittest.TestCase): def test_is_factor(self): """is_factor関数のテスト""" self.assertEqual(is_factor(5, 10), True) self.assertEqual(is_factor(5, 11), False)
このテストは、コマンドラインから実行するのがお勧めです。
python -m unittest
これは、カレントディレクトリの「test_*.py」のようなpythonファイル全てのテストを実行します。
python -m unittest discover -s tests -p "*_test.py"
のようにすると、「test」ディレクトリの「*_test.py」という名前のファイル全て、という指定になります。詳しいオプションは公式ドキュメントを参照すると良いでしょう。
doctest
上記のunittestは、少し面倒に感じる人もいるかもしれません。そのような場合にお勧めなのが、doctestです。これがどういったテストかは、以下のコードを見るのが手っ取り早いでしょう。
# mymath2.py def is_factor(a, b): """aがbの約数ならTrueを返す >>> is_factor(5, 10) True >>> is_factor(5, 11) False """ if b % a == 0: return True else: return False
関数のdocstringが増えています。このように、docstring中に
>>> 処理
結果
のような形で記述していきます。
このdoctestは先程のようにtest.pyを作成する必要がなく、更にテストがそのままdocstringになります。コマンドラインからは、以下のように実行できます。
python -m doctest mymath2.py
サードパーティ製ライブラリ
pytest
(pip install pytest)
Github
unittestと似ていますが、より軽量な構文でテストを書くことができます。更に、テストにエラーがあった際に表示される内容が詳しくなっています。unittestで書いたテストも実行してくれるので、過去に書いたテストが無駄にもなりません。
# test_math.py from mymath import is_factor def test_is_factor(): """is_factor関数のテスト""" assert is_factor(5, 10) == True assert is_factor(5, 11) == False
コマンドラインからは、以下のように実行できます。
pytest
テストの対象となるのは、カレントディレクトリ以下の「test_.py」や「_test.py」全てです。その中で、unittestのテストと、testから始まる通常の関数、Testから始まるクラス名(のtestから始まるメソッド)をそれぞれ実行していきます。通常のunittestに比べると、範囲が広くなっていますね。
株式会社キャパでは、アプリの企画・開発についてご相談を承っています。
アプリを作りたいので、具体的な提案が欲しい。頭の中にあるアイデアを本当に実現できるのか知りたい。予算内に収まるのか?
などのお客様のご相談に、親身に応じます。
アプリ開発:実績のご紹介