Pythonのテストとデバッグにおいて、unittest や pytest は代表的なテストフレームワークであり、コードの信頼性を高めるために広く使用されます。以下では、それぞれの特徴とテストの作成方法について詳しく説明します。
1. unittest モジュール
unittest モジュールunittest はPythonに標準で搭載されているテストフレームワークです。JavaのJUnitに似た構文を持ち、クラスベースでテストを構成します。
特徴:
-
標準ライブラリに含まれているため追加インストール不要
-
クラスを使った構造的なテスト記述
-
セットアップとクリーンアップの仕組みあり(
setUp/tearDown)
基本的な使い方:
よく使われるアサーションメソッド:
-
assertEqual(a, b):a == bであることを確認 -
assertTrue(x):xが真であることを確認 -
assertRaises(Exception, func, args):指定の例外が発生することを確認
2. pytest フレームワーク
pytest フレームワークpytest はより簡潔かつ柔軟な記述ができるサードパーティ製のフレームワークで、デフォルトで詳細な出力を提供します。
特徴:
-
インストールが必要(
pip install pytest) -
関数ベースで簡単にテストが書ける
-
テストの自動検出、詳細なエラーレポート、fixture機能が強力
-
unittestとの互換性あり(既存のテストコードも流用可)
基本的な使い方:
コマンドラインで実行:
よく使われる機能:
-
fixture による共通処理の注入
-
パラメータ化によるテストケースの簡素化
-
マーク機能(@pytest.mark) によるグループ分けやスキップ
fixtureの例:
まとめ:unittestとpytestの比較
| 機能 | unittest | pytest |
|---|---|---|
| 標準搭載 | あり | なし(pip install pytest) |
| 記述スタイル | クラスベース | 関数ベース中心(クラスも可) |
| アサーション | 専用メソッドを使用 | assert文をそのまま使用可能 |
| 拡張性 | 標準的な機能のみ | fixtureやプラグインが豊富 |
| 実行方法 | python test.py |
pytestコマンドで簡単に実行 |
テストのベストプラクティス
-
テストファイル名は
test_*.pyにする:pytestが自動で検出 -
各関数ごとにユニットテストを書く
-
失敗するテストを意図的に作って挙動確認(TDD)
-
CIツールと組み合わせて自動実行する
生成日:2025/05/03