Pythonでユニットテストコードを描くためのフレームワーク比較

python Python

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など様々な有名ライブラリのテスティングフレームワークとして使われています。

https://github.com/numpy/numpy/tree/main/numpy/tests
https://github.com/pallets/flask/tree/main/tests

毎年行われているPython開発者への調査結果 Python Developers Survey 2021 Resultsでは以下のような結果になっています。これを見るとpytestはunittestの2倍のシェアがあることがわかります。

※ Python Developers Survey 2021 Resultsより引用

また、情報量も多く、書籍も販売されてます。

こちらもunittest同様にVS Codeでサポートされています。

結論

以上の特徴から、情報量の多さ、シェア、使いやすさといったところからpytestを使用するとよいという結論に至りました。

コメント