Pythonスクリプトのユニットテストをpytestで行ってみる。
pythonには最初からユニットテストを行う機能が付属しているのだが、2021 年 Python 開発者アンケートの結果によると一番人気はpytestであるため、普及率に合わせて――普及率は正義である。大抵こなれているし、調べものもしやすい――こちらを採用した。
pytest
Install
pip install pytest pytest-cov pytest-mock
pytest-covはユニットテストのカバレッジ計測用。ユニットテストを行うならカバレッジ計測もしたくなるものなので、最初から導入しておく。
pytest-mockはモック用。これもどの道使うはずなので入れておく。
Example
ディレクトリ構成
ファイルが少なければ同じディレクトリでOK。
└─develop_send_mail
main.py
main_test.py
公式によれば test.py または test.py のファイルを実行してくれる。
大量のファイルがあるなら、こちらで紹介されているようにディレクトリを分けて下記のようにする。
develop_send_mail
└─develop_send_mail
__init__.py
...
└─tests
__init__.py
...
元ネタはこちららしい。
ソースコード
下記のように書く。pytestをコマンドで呼び出すのでテストコードのほうで表現しなくてよいらしい。
from cerberus import Validator
import main
def test_is_email():
v = Validator({"email": {"check_with": main.is_email}})
assert v.validate({"email": "test@example.com"})
assert not v.validate({"email": "testexample.com"})
実行方法
pytest main_test.py
ファイル指定なしでもOK。
pytest