python-testing-patterns は何をしますか?
pytest、フィクスチャ、モッキング、テスト駆動開発を用いて包括的なテスト戦略を実装します。Pythonテストの作成、テストスイートの設定、テストのベストプラクティスの実装時に使用します。
概要
このスキルは、Pythonプロジェクトにおいてpytestを使用した効果的なテスト戦略を実装するためのパターンとベストプラクティスを提供します。テスト駆動開発(TDD)、フィクスチャの活用、モッキング、パラメータ化テストなど、実際の開発現場で役立つテスト手法をカバーします。
提供されるパターン
1. テスト駆動開発 (TDD)
Red-Green-Refactor サイクルに従い、テストを先に書くことで設計を改善し、バグを早期に発見します。
- Red: 失敗するテストを書く
- Green: テストを通過する最小限のコードを書く
- Refactor: コードをリファクタリングして品質を向上させる
2. pytest フィクスチャ
フィクスチャを使用してテストのセットアップとクリーンアップを管理し、コードの重複を減らします。
import pytest
@pytest.fixture
def sample_data():
return {"key": "value", "number": 42}
def test_sample_data(sample_data):
assert sample_data["number"] == 42
3. モッキング
unittest.mock または pytest-mock を使用して外部依存関係をモック化し、テストの信頼性と速度を向上させます。
import pytest
from unittest.mock import Mock
def test_external_api(mocker):
mock_response = Mock()
mock_response.json.return_value = {"status": "ok"}
mocker.patch('requests.get', return_value=mock_response)
# テスト対象の関数を実行
result = my_function()
assert result["status"] == "ok"
4. パラメータ化テスト
異なる入力データセットで同じテストロジックを実行し、テストの網羅性を高めます。
import pytest
@pytest.mark.parametrize("input,expected", [
(1, 2),
(2, 4),
(3, 6),
])
def test_double(input, expected):
assert input * 2 == expected
5. カバレッジレポート
pytest-cov を使用してコードカバレッジを計測し、テストが十分に行われているかを確認します。
pytest --cov=my_project --cov-report=html
使用方法
-
プロジェクトにpytestと関連プラグインをインストールします:
pip install pytest pytest-mock pytest-cov -
tests/ディレクトリを作成し、テストファイルをtest_*.pyの形式で配置します。 -
テストを実行します:
pytest -v -
カバレッジレポートを生成します:
pytest --cov=my_project --cov-report=term-missing
ベストプラクティス
- テスト関数名は
test_で始め、テスト対象の機能を明確に説明する名前を付けます。 - 各テストは1つのアサーションに集中させるか、関連するアサーションをグループ化します。
- フィクスチャのスコープ(
function,class,module,session)を適切に設定して、テストのパフォーマンスを最適化します。 - 外部APIやデータベースへの依存はモック化し、テストの独立性を保ちます。
- テストコードもプロダクションコードと同様にリファクタリングし、保守性を維持します。
サポートされるプラットフォーム
- Python 3.6+
- pytest 7+
- 任意のPythonプロジェクト(Webアプリケーション、データ処理、CLIツールなど)