doctest
ドックテスト(標準ライブラリ)
意味 コード例をテストとして実行
doctestとは?
doctestは、Pythonのコード中のドキュメンテーション文字列に埋め込まれたコード例をテストとして実行するためのモジュールです。 ドキュメンテーションとテストコードを一緒に保つことができるため、コードの変更に強く、分かりやすいテストを作成できます。
doctestの具体的な使い方
関数のdoctest
def factorial(n):
"""
非負整数nの階乗を計算します。
>>> factorial(0)
1
>>> factorial(1)
1
>>> factorial(5)
120
>>> factorial(-1)
Traceback (most recent call last):
...
ValueError: n must be >= 0
"""
if n < 0:
raise ValueError("n must be >= 0")
if n == 0 or n == 1:
return 1
else:
return n * factorial(n - 1)
if __name__ == "__main__":
import doctest
doctest.testmod()
このコードは、factorial関数のドキュメント文字列内にdoctestを記述しています。>>> で始まる行は対話的なPythonセッションの入力を示し、その次の行が期待される出力です。doctest.testmod()を呼び出すことで、これらのテストが自動的に実行されます。正常なケース、エッジケース、そしてエラーケースもテストしています。
クラスのdoctest
class Stack:
"""
簡単なスタッククラスの実装
>>> s = Stack()
>>> s.is_empty()
True
>>> s.push(1)
>>> s.push(2)
>>> s.pop()
2
>>> s.pop()
1
>>> s.pop()
Traceback (most recent call last):
...
IndexError: スタックが空です
"""
def __init__(self):
self.items = []
def is_empty(self):
return len(self.items) == 0
def push(self, item):
self.items.append(item)
def pop(self):
if self.is_empty():
raise IndexError("スタックが空です")
return self.items.pop()
if __name__ == "__main__":
import doctest
doctest.testmod()
このコードは、Stackクラスのドキュメント文字列内にdoctestを記述しています。クラスの使用方法、メソッドの動作、そしてエラー処理までをテストしています。doctestを使用することで、クラスの使用例とテストを同時に提供でき、ドキュメンテーションとしても有用です。
doctestに関するよくある質問
doctestが学べる書籍の紹介
「プログラミング単語帳」を使って、プログラミングの単語を英単語のように学習してみませんか?
プログラミング単語帳には、Pythonのdoctestやthreading.Event、math、threading.RLock、などのような実務でよく使われる単語が数百以上収録されています。
この書籍には、プログラミングの単語の意味や読み方、単語の使い方がわかる例文などが掲載されており、いつでもどこでもプログラミングの学習ができます。
よく使われる単語にだけ絞って学習することができるので、効率的にプログラミングが学習できます。
HTML編、CSS編、JavaScript編、PHP編、Ruby編、その他単語編の6シリーズ分が公式ストアにて販売中です。気になった方はぜひ購入してみてください。
Pythonを学べる「プログラミング単語帳」アプリ
プログラミング単語帳がアプリになりました!Pythonはもちろん、10種類のプログラミング言語の中から、よく使われる単語をスマホで学習できます。
収録単語は2,000単語以上!
現在は、HTML、CSS、JavaScirpt、PHP、Laravel、Ruby、Python、MySQL、Linux、など10カテゴリーの単語帳が1つのアプリに収録されています。
いつでも、どこでも、隙間時間を有効活用して、プログラミングを効率的に学べるので、ぜひダウンロードしてみてください。
2024年7月アップデート情報:「Laravel」カテゴリーが追加されましました!
2024年8月アップデート情報:「MySQL」「Linux」カテゴリーが追加されましました!