複雑な条件をテストするときは「テストデータ駆動(パラメータ化テスト)」を使うと、同じテスト関数で複数のケースを一気に確認できます。Pythonでは pytest の @pytest.mark.parametrize がよく使われます。
基本の考え方
- 複雑な条件を関数化しておく(例:
can_access) - テストケースを表にする(入力と期待値を並べる)
- パラメータ化テストで一括実行する
例:アクセス権チェック関数
def can_access(age, is_member, has_invite_code):
return (age >= 18 and is_member) or has_invite_code
Pythonパラメータ化テスト(pytest)
import pytest
@pytest.mark.parametrize(
"age, is_member, has_invite_code, expected",
[
(20, True, False, True), # 成人かつ会員 → OK
(20, False, False, False), # 成人だが非会員 → NG
(17, True, False, False), # 未成年 → NG
(17, False, True, True), # 招待コードあり → OK
(30, False, True, True), # 成人で招待コードあり → OK
]
)
def test_can_access(age, is_member, has_invite_code, expected):
assert can_access(age, is_member, has_invite_code) == expected
Python✅ メリット
- テストケースを「表形式」で管理できる
- 新しい条件を追加するときはリストに行を足すだけ
- テスト関数は1つで済むのでコードがすっきり
応用:複雑な入力チェック
例えば「メールとパスワードが両方ある または ゲストログインがTrue」ならログイン可能:
def can_login(email, password, guest_login):
return (email and password) or guest_login
Pythonテストをパラメータ化すると:
@pytest.mark.parametrize(
"email, password, guest_login, expected",
[
("user@example.com", "secret", False, True), # 正常ログイン
("", "secret", False, False), # メールなし → NG
("user@example.com", "", False, False), # パスワードなし → NG
("", "", True, True), # ゲストログイン → OK
]
)
def test_can_login(email, password, guest_login, expected):
assert can_login(email, password, guest_login) == expected
Pythonまとめ
- 複雑な条件は関数化してテスト対象を明確にする
- パラメータ化テストで入力と期待値を表形式にまとめる
- 新しい条件を追加するときは「行を足すだけ」で管理が楽になる


