今日仕事中に質問されてちゃんと答えられなかったので調べました。

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'

公式をみても、そうした例が出てきます。

Installation and Getting Started — pytest documentation