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ヶ月前にクローズされました