1. TOP
  2. ブログ
  3. Python、テスト用ライブラリの紹介

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に比べると、範囲が広くなっていますね。

 

 

株式会社キャパでは、アプリの企画・開発についてご相談を承っています。

アプリを作りたいので、具体的な提案が欲しい。頭の中にあるアイデアを本当に実現できるのか知りたい。予算内に収まるのか?
などのお客様のご相談に、親身に応じます。
アプリ開発:実績のご紹介

    カテゴリ一覧

    PAGE TOP