Closed3
Python3_doctestモジュール
Python実践レシピより
Python3エンジニア認定実践試験メモ
doctestモジュール(テストコードをインラインに)
テスト実行コード
main.py
import doctest
def div(a, b):
"""
答えは小数で返す
>>> [div(n, 2) for n in range(5)]
[0.0, 0.5, 1.0, 1.5, 2.0]
"""
return a / b
if __name__ == "__main__":
doctest.testmod()# doctestを実行
実行と結果
command
python3 main.py -v
output
Trying:
[div(n, 2) for n in range(5)]
Expecting:
[0.0, 0.5, 1.0, 1.5, 2.0]
ok
1 items had no tests:
__main__
1 items passed all tests:
1 tests in __main__.div
1 tests in 2 items.
1 passed and 0 failed.
Test passed.
doctestモジュール(例外を扱う)
テスト実行コード
main.py
import doctest
def div(a, b):
"""
0除算の時は例外を出力する
>>> div(1, 0)
Traceback (most recent call last):
...
ZeroDivisionError: divition by zero
"""
return a / b
if __name__ == "__main__":
doctest.testmod()# doctestを実行
実行と結果
command
python3 main.py -v
output
File "/Users/xxx(省略)
Failed example:
div(1, 0)
Expected:
Traceback (most recent call last):
...
ZeroDivisionError: divition by zero
Got:
Traceback (most recent call last):
(省略)
return a / b
~~^~~
ZeroDivisionError: division by zero
1 items had no tests:
__main__
*********************
1 items had failures:
1 of 1 in __main__.div
1 tests in 2 items.
0 passed and 1 failed.
***Test Failed*** 1 failures.
doctestモジュール(テストコードを別ファイルに)
テスト対象
target.py
# coding: utf-8
def div(a, b):
return a / b
テストコード
doctest.txt
テスト対象をインポート
>>> from target import div
関数のテスト(エラーを起こしてみる)
>>> div(6, 2)
4.0
テスト実行コード
main.py
# coding: utf-8
"""
doctestモジュール
"""
#==========
# Main
import doctest
if __name__ == "__main__":
doctest.testfile("doctest.txt")# doctestを実行
実行と結果
command
python3 main.py -v
output
File "/Users/xxx(省略)
Failed example:
div(6, 2)
Expected:
4.0
Got:
3.0
**********************
1 items had failures:
1 of 2 in doctest.txt
***Test Failed*** 1 failures.
このスクラップは2ヶ月前にクローズされました