PR

Pythonで始めるテスト自動化入門:unittestとpytestの活用法

Python
スポンサーリンク

Pythonは、豊富なテストフレームワークを備えた言語であり、テスト自動化を行うのに適しています。本記事では、テスト自動化の基本から、Python標準の unittest と人気の pytest を使った具体的なテストの書き方を詳しく解説します。

1. テスト自動化とは?

なぜテスト自動化が重要なのか?

ソフトウェア開発において、コードの品質を保つためにテストは不可欠です。手動テストでは時間がかかり、ヒューマンエラーも発生しやすくなります。そのため、自動化されたテストを導入することで、開発の効率を向上させ、バグの早期発見が可能になります。

2. Pythonのテストフレームワーク

Pythonには複数のテストフレームワークがあります。

  • unittest(標準ライブラリ)
  • pytest(簡潔で強力なテストフレームワーク)
  • doctest(ドキュメントのテスト)
  • nose2(より柔軟なテスト実行)

本記事では、特に unittestpytest の活用方法に焦点を当てます。

3. unittest の基本と使い方

unittest はPython標準のテストフレームワークであり、簡単にユニットテストを作成できます。

unittest を用いた基本的なテストの書き方

import unittest

# テスト対象の関数
def add(a, b):
    return a + b

class TestAddFunction(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(2, 3), 5)
        self.assertEqual(add(-1, 1), 0)

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

unittest の実行方法

python test_script.py

unittest は、クラスベースのテスト構造を提供し、テストケースを整理しやすくなります。

4. pytest の特徴と活用方法

pytest は、より簡潔で柔軟なテストが可能なテストフレームワークです。

pytest のインストール

pip install pytest

pytest を使ったテストの書き方

# test_sample.py
import pytest

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

def test_add():
    assert add(2, 3) == 5
    assert add(-1, 1) == 0

pytest の実行

pytest test_sample.py

unittest に比べて、関数ベースでシンプルに記述できる点が特徴です。

pytest の高度な機能

  • パラメータ化テスト
@pytest.mark.parametrize("a,b,expected", [(2, 3, 5), (-1, 1, 0), (0, 0, 0)])
def test_add(a, b, expected):
    assert add(a, b) == expected
  • フィクスチャの活用
@pytest.fixture
def sample_data():
    return {"name": "Alice", "age": 30}

def test_sample_data(sample_data):
    assert sample_data["name"] == "Alice"

5. 実践:サンプルプロジェクトでのテスト

サンプルプロジェクトで、unittestpytest を用いたテストを実装します。

  1. calc.py(テスト対象のコード)
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b
  1. test_calc.pypytest を使ったテスト)
import pytest
from calc import add, subtract

def test_add():
    assert add(2, 3) == 5
    assert add(-1, 1) == 0

def test_subtract():
    assert subtract(5, 3) == 2
    assert subtract(0, 0) == 0
  1. テストの実行
pytest test_calc.py

6. まとめ

本記事では、Pythonの unittestpytest を用いたテスト自動化について解説しました。

  • unittest は標準ライブラリであり、クラスベースで整理されたテストが可能。
  • pytest は簡潔で柔軟な記述ができ、パラメータ化テストやフィクスチャが活用可能。

テストを活用することで、バグの発見が容易になり、コードの品質向上が期待できます。実際の開発でも積極的に取り入れてみましょう!

コメント

タイトルとURLをコピーしました