今日仕事中に質問されてちゃんと答えられなかったので調べました。
Q : Pythonの単体テストをするのに、単体テスト用のクラスを定義する必要があるかどうか
A : pytestではNo、unittestではYES
※違うよ、ってときはぜひ教えてください
unittestの場合
公式に以下のように書いてあります。
テストケースは、 unittest.TestCase のサブクラスとして作成します。メソッド名が test で始まる三つのメソッドがテストです。テストランナーはこの命名規約によってテストを行うメソッドを検索します。
unittest — ユニットテストフレームワーク — Python 3.7.4rc2 ドキュメント
つまり、unittestでテストケースを書くためにはunittest.TestCaseを継承したクラスを定義する必要がある。
サンプル
import unittest
class TestStringMethod(unittest.TestCase):
def test_hoge(self):
self.assertEqual('foo'.upper(), 'FOO')
if __name__ == '__main__':
unittest.main()
pytestの場合
pytestの場合はクラスを作る必要は必ずしもない。以下のコードがちゃんと実行できる。
import pytest
def test_hoge():
assert 'foo'.upper() == 'FOO'
公式をみても、そうした例が出てきます。