Pythonでユニットテストを書く時になんのフレームワークを使ったらいいのか悩んだ時の話をこのページに書いておきます。
Pythonのユニットテストフレームワークとしては、Python標準で入っているunittestか、pytestの2択になると思います。
選定のためには、やはり使っている実績が多いものや、情報量が多いものがいいと思います。使われているということは、フレームワークの安定性であったり、開発コミュニティが活発であることが考えられます。そのあたりを考慮して、フレームワーク選定を行いました。
結論はPytestを使うということに落ち着きました。なぜPytestなのかを記載したいと思います。
unittest, pytestの特徴
代表的なものとしては以下があげられます。
- unittest
- pytest
- doctest
doctestは少し趣が違うので、ここではunittestとpytestの特徴を見ていきたいと思います。
unittest
Python標準モジュールとして入ってますので、何か追加でインストールして、、、といったことはいらないのですぐ使えます。
JavaのテストフレームワークJUnitに触発されて開発されたものになります。
JUnitやNUnitなどのテストフレームワークを使ったことがある人は入りやすいかと思います。VS Codeでもサポートされています。
VS Codeのフラスコのマークからテストケースを実行したりすることができます。ここでunittestかpytestが標準で選ぶことができます。
こんな感じで、VS Code上から、すべてのテストを実行したり、指定のテストを実行したりすることができます。(めちゃめちゃ便利)
pytest
Pythonらしくテストの記載ができます。特に比較がpytestは優れており、unittestでは期待値と実際の値を比較する際に assertTrueやassertEqualなど関数を呼び分けないといけないのに対して、pytestは ==や!= など直観的に記載することができます。
そして、numpyやFlaskなど様々な有名ライブラリのテスティングフレームワークとして使われています。
毎年行われているPython開発者への調査結果 Python Developers Survey 2021 Resultsでは以下のような結果になっています。これを見るとpytestはunittestの2倍のシェアがあることがわかります。
※ Python Developers Survey 2021 Resultsより引用
また、情報量も多く、書籍も販売されてます。
こちらもunittest同様にVS Codeでサポートされています。
結論
以上の特徴から、情報量の多さ、シェア、使いやすさといったところからpytestを使用するとよいという結論に至りました。
コメント