python の単体テストをするのにクラスを定義する必要があるかどうか

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

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

この記事を書いた人

yoshikiito

都内でテストエンジニア&ブロガーをやっている@yoshikiitoです。

ソフトウェアエンジニアの学習方法や成長するための考え方、会社に依存せず自分の力で生きていけるエンジニアになる方法などについて興味があります。
こういった方法や考え方、自分が試したことなどをブログを通じて発信します。

仕事は主にソフトウェアテストやテスト自動化。
趣味は浦和レッズと読書と技術書を買って積むこと。

技術評論社から本を出すのが夢