Help us understand the problem. What is going on with this article?

doctest:関数に説明文をつけて、コードの変更後に他のコードの挙動がおかしくなっていないか確かめる

doctestとは?

pythonのdoctestというモジュールを紹介します。
このモジュールは関数内に記述されているコメント(docstring)を読み込み、docstringに書かれているインタラクティブ用の記述(>>>から始まる文)を実行します。

このような機能から、doctestモジュールは以下のように使われます:

  • docstringに書かれていることと、実行文の間に整合性があるかを、docstringに記載してある例を実行することで確かめることができる

  • プログラムを変更したときに他の部分がおかしな挙動をしていないか確認してくれる(回帰テスト)。

つまり、一つ一つの関数が期待どうり動いてくれているかを自動的に行ってくれます。

doctestを使ってみる

以下のプログラムを用意しました。

doctes.py
def add(a,b):
    """
    >>> add(1,2)
    3
    >>> add(3,4)
    7
    """
    return a+b

if __name__ == "__main__":
    import doctest
    doctest.testmod()

add関数を定義し、そのすぐ下にトリプルクオテーションでdocstringが書かれています。>>>がインタラクティブなコマンドを示していて、このコマンドのすぐ下に期待する数値を書きます。doctestはインタラクティブなコマンドを実行し、その結果が期待する値になるか確かめてくれます。

関数名のすぐ後にトリプルクオテーションで文を書かないと、docstringにならないので注意。

import doctestif __name__=="main":以下で宣言し、doctest.testmod()でdoctestを実行しています。

このプログラムをpython doctes.pyで実行してみましょう。実行結果が3になり、かつ7になれば、doctest.testmod()はなにも出力しません。

python doctes.py -vとすれば、テストでなにも生じなかったときでも詳細を出力(verbose)してくれます。

まとめ

コードを書き換えたときに、他の箇所は本当に設計どうりうごいてくれているのか?それを確かめてくれるのがdoctestモジュールです。

詳細はこちらから:
doctest: https://docs.python.org/3/library/doctest.html#module-doctest

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away