鉄は熱いうちに打て
=============================
doctestを触ってみた¶
2017-12-10
今日の内容は、 Pythonでテストしたい にまとめている内容の詳細部分です。
doctestを触ってみました。
sample.py
"""
値を1増加させる関数です
>>> add_one(1)
2
"""
def add_one(x):
"""
値が1増加します
>>> [add_one(x) for x in range(5)]
[1, 2, 3, 4, 5]
"""
return x + 1
if __name__ == '__main__':
import doctest
doctest.testmod()
実行する
$ python sample.py
正常に動作した場合はなにも表示されない
sample.pyの14行目を return x + 2
と書き換えて実行
$ python sample.py
**********************************************************************
File "sample.py", line 3, in __main__
Failed example:
add_one(1)
Expected:
2
Got:
3
**********************************************************************
File "sample.py", line 11, in __main__.add_one
Failed example:
[add_one(x) for x in range(5)]
Expected:
[1, 2, 3, 4, 5]
Got:
[2, 3, 4, 5, 6]
**********************************************************************
2 items had failures:
1 of 1 in __main__
1 of 1 in __main__.add_one
***Test Failed*** 2 failures.
エーラーが出ます。
正しい場合も実行時にオプション -v
をつけるとテストの詳細が表示されます。
$ python sample.py -v
Trying:
add_one(1)
Expecting:
2
ok
Trying:
[add_one(x) for x in range(5)]
Expecting:
[1, 2, 3, 4, 5]
ok
2 items passed all tests:
1 tests in __main__
1 tests in __main__.add_one
2 tests in 2 items.
2 passed and 0 failed.
Test passed.
別のファイルにも書き出せるようです。
sample.txt
The ``sample`` module
==========================
Using ``add_one``
------------------------
First import ``add_one`` from the ``sample`` module:
>>> from sample9 import add_one
Now use it:
>>> add_one(1)
2
sample.py
def add_one(x):
return x + 1
if __name__ == '__main__':
import doctest
doctest.testfile("sample.txt")
実行
$ python sample.py -v
Trying:
from sample import add_one
Expecting nothing
ok
Trying:
add_one(1)
Expecting:
2
ok
1 items passed all tests:
2 tests in sample.txt
2 tests in 1 items.
2 passed and 0 failed.
Test passed.
簡単な機能の関数のテストならこれで充分ですね。
参考リンク¶
公式ドキュメント: doctest — 対話的な実行例をテストする