unittest で作成したテストコードは、Pythonスクリプトとして直接実行する(if __name__ == "__main__": を書く)だけでなく、コマンドラインから python -m unittest コマンドを使用することで、より柔軟に実行できます。
このコマンドを使うと、ディレクトリ内のテストファイルを自動的に探して一括実行したり、特定のテストメソッドだけをピンポイントで実行したりすることが可能になります。
この記事では、python -m unittest コマンドの基本的な使い方と、実行対象の指定方法について解説します。
1. テストの自動探索と一括実行 (Test Discovery)
最も便利な機能が「テストディスカバリ(Test Discovery)」です。 プロジェクトのルートディレクトリで以下のコマンドを実行するだけで、配下にあるテストファイルを自動的に見つけ出し、まとめて実行してくれます。
python -m unittest
自動探索のルール
このコマンドがテストファイルとして認識するためには、以下の条件を満たしている必要があります。
- ファイル名が
testで始まっていること(例:test_calc.py,test_api.py)。 - トップレベルのディレクトリからインポート可能であること(パッケージ化されている場合など)。
このルールに従ってファイルを命名しておけば、テストファイルが増えてもコマンド一つですべてのテストを実行できます。
2. 特定のテストファイルを指定して実行
特定のファイルだけをテストしたい場合は、そのファイルパス(またはモジュール名)を引数として渡します。
ファイルパスで指定する場合:
# Windowsの場合
python -m unittest tests\test_calculations.py
# macOS / Linux の場合
python -m unittest tests/test_calculations.py
モジュール名で指定する場合: Pythonのモジュールとして認識できる場所にいる場合は、ドット区切りで指定することも可能です。拡張子 .py は不要です。
python -m unittest tests.test_calculations
3. 特定のクラスやメソッドを指定して実行
さらに細かく、特定のテストクラスや、その中の特定のテストメソッド(関数)だけを実行することも可能です。デバッグ時に特定のテストだけを繰り返し実行したい場合に非常に役立ちます。
構文: python -m unittest モジュール名.クラス名.メソッド名
例: test_calculations.py ファイルの中にある TestCalc クラスの test_add メソッドだけを実行する。
python -m unittest tests.test_calculations.TestCalc.test_add
詳細な結果を表示する (-v オプション)
どのテストが実行され、どれが成功・失敗したのかを詳細に知りたい場合は、-v (verbose) オプションを付けます。
python -m unittest -v
実行結果の例:
test_add (tests.test_calculations.TestCalc) ... ok
test_divide (tests.test_calculations.TestCalc) ... ok
test_multiply (tests.test_calculations.TestCalc) ... FAIL
======================================================================
FAIL: test_multiply (tests.test_calculations.TestCalc)
...
テストメソッド名とその実行結果(ok, FAIL, ERROR)が1行ずつ表示されるため、状況を把握しやすくなります。
まとめ
python -m unittest コマンドを使うことで、テストの実行を効率化できます。
python -m unittest: カレントディレクトリ以下のtest*.pyを自動探索して一括実行します。python -m unittest パス: 特定のファイルを指定して実行します。python -m unittest モジュール.クラス.メソッド: 特定のテストケースのみを実行します。-vオプション: 実行結果を詳細に表示します。
開発中は特定のメソッドのみを実行し、コミット前には一括実行を行うなど、状況に応じて使い分けることを推奨します。
