0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python初心者】unittestの実行方法とテストの整理方法

0
Last updated at Posted at 2025-06-23

今回は、テストの実行方法や、**複数ファイルに分けたテストの構成(整理)**について学んだことをまとめます。

unittestの実行方法(基本)

テストスクリプトを直接実行すれば、unittest.main() が走るようになっているのが基本です。

import unittest

def add(a, b):
    return a + b

class TestAdd(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(2, 3), 5)

if __name__ == '__main__':
    unittest.main()

実行方法

python test_add.py

→ スクリプトが実行され、テスト結果が表示されます。

コマンドラインから unittest を実行する

Python には -m unittest を使ってコマンドラインからテストを実行する方法があります。
これにより、__main__ ブロックがなくてもテストを実行できます。

例:特定のテストファイルを実行

python -m unittest test_add.py

例:ディレクトリ内のすべてのテストを自動で検出して実行

python -m unittest discover

このコマンドは、カレントディレクトリ以下を再帰的に探索し、
**ファイル名が test で始まる .py ファイル(例:test_add.py)**の中からテストを実行します。

このとき使用されるファイル名のパターンは、オプション -pデフォルト値である test*.py です。
そのため、ファイル名が sample_test.py のように test で始まっていない場合は検出されません。

🔍 デフォルトの動作まとめ:

  • 探索開始ディレクトリ:カレントディレクトリ(-s .
  • 対象ファイルパターン:test*.py-p オプションのデフォルト値)
  • サブディレクトリも含めて再帰的に探索される

discover のオプション

python -m unittest discover -s tests -p "test_*.py"
オプション 意味
-s テストを探す開始ディレクトリ
-p ファイル名のパターン指定

-p を使うことで、test_*.py*_test.py のような形式にも柔軟に対応できます。

テストファイルを分割して整理する

テストが複数ある場合は、以下のようにディレクトリで整理するのが一般的です。

project/
├── main.py
└── tests/
    ├── test_add.py
    ├── test_subtract.py
    └── __init__.py

このようにしておけば、以下のようにしてすべてのテストをまとめて実行できます。

python -m unittest discover -s tests

テストスイートを使って明示的にまとめる

複数のテストクラスを自分で組み合わせて、1つにまとめて実行したいときは「テストスイート(TestSuite)」を使います。
これは必要なテストだけを指定して集める方法で、スクリプト内で順序や内容を明確にコントロールしたいときに便利です。

使用例

import unittest
from test_add import TestAdd
from test_subtract import TestSubtract

def suite():
    suite = unittest.TestSuite()
    suite.addTest(unittest.makeSuite(TestAdd))
    suite.addTest(unittest.makeSuite(TestSubtract))
    return suite

if __name__ == '__main__':
    runner = unittest.TextTestRunner()
    runner.run(suite())

解説

説明
import unittest テスト用のモジュールを読み込む
from test_add import TestAdd test_add.py に定義されたテストクラスをインポート
from test_subtract import TestSubtract 同様に別のテストクラスをインポート
suite = unittest.TestSuite() 空のテストスイートを作成(= テストの入れ物)
suite.addTest(unittest.makeSuite(...)) 指定したテストクラス内の全テストをスイートに追加
return suite 作成したスイートを返す
unittest.TextTestRunner() 実行結果をテキスト形式で出力するランナーを作成
runner.run(suite()) スイートを実行する(関数呼び出しで返された中身を実行)

ポイント

  • makeSuite(TestClass) は、クラスの中にある test_ で始まるすべてのテストメソッドを1つのセットにしてくれます。
  • 自分で追加するテストクラスを明示できるので、細かい実行制御をしたいときに便利です。
  • TestSuite を使わずに unittest.main() に任せることもできますが、「何を実行するか」を自分で決めたい場合はこちらの方法が向いています。

このように、テストスイートを使えば自分で実行対象のテストを選びながらまとめて一括実行できるため、規模の大きいテストや条件付き実行に役立ちます。

まとめ

  • テストは python ファイル名.py でも、-m unittest でも実行できる
  • discover を使えば、再帰的にテストファイルを自動検出して実行できる
  • discover のデフォルトは -s .-p test*.py
  • テストが増えてきたら tests/ フォルダで整理すると管理しやすい
  • TestSuite を使えば、必要なテストだけをまとめて実行することもできる
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?