Pythonではコメントに単体テストを書くことができる機能がついています。
それがdoctestというものです。
サンプルコード
さっそくサンプルコードを見ていこうと思います。
まず以下のような簡単な関数があるとします。
def test_fun():
return "test"
print(test_fun())
この関数のテストをdoctestでおこなっていきます。
先程のソースコードを以下のように修正します。
def test_fun():
"""
>>> test_fun()
'test'
"""
return "test"
import doctest
doctest.testmod()
このコードでは、コメントに記述してある部分でtest_fun()関数を実行すると”test”という文字列が帰ってくるかをテストしています。
このコードを実行すると何も出力されません。これはテストが正しいことを意味しています。
テストが正しくない場合
逆正しくなければ間違っていることを知らせてくれます。
例えば、以下のようにテストコードを修正し、実行すると、
def test_fun():
"""
>>> test_fun()
'aaaa'
"""
return "test"
import doctest
doctest.testmod()
次のように表示されます。
Failed example:
test_fun()
Expected:
'aaaa'
Got:
'test'
**********************************************************************
1 items had failures:
1 of 1 in __main__.test_fun
***Test Failed*** 1 failures.
予測された値とこの関数から得られた値が異なっていることを示してくれます。
その他の書き方
また、以下のような書き方もできます。
def test_fun():
"""
>>> test_fun() == 'test'
True
"""
return "test"
import doctest
doctest.testmod()
doctestには他にもたくさん機能があります。参考文献を見てみてください。
参考文献
https://docs.python.org/ja/3/library/doctest.html#simple-usage-checking-examples-in-a-text-file