このプロジェクトは、日本語(ひらがな・カタカナ)の名前を検証する機能を、Property-Based Testing(PBT)を使用して徹底的にテストするサンプルプロジェクトです。
日本語の名前が正しい文字(ひらがな、カタカナ、長音記号)のみで構成されているかを検証する機能を提供し、Hypothesisライブラリを使用した property-based testing で品質を保証します。
pbt.py- 日本語名前検証の実装test_pbt.py- Property-Based Testing のテストケースREADME.md- このファイル
指定された文字列が有効な日本語の名前かどうかを判定します。
有効な文字:
- ひらがな(あ〜ん)
- カタカナ(ア〜ン)
- 長音記号(ー)
- 濁点・半濁点を含む
例:
from pbt import is_valid_name
# 有効な名前
print(is_valid_name("たなか")) # True(ひらがなのみ)
print(is_valid_name("タナカ")) # True(カタカナのみ)
print(is_valid_name("たーち")) # True(長音記号含む)
print(is_valid_name("づけ")) # True(濁点含む)
print(is_valid_name("あいうエオ")) # True(ひらがな・カタカナ混在)
print(is_valid_name("カタかな")) # True(カタカナ・ひらがな混在)
# 無効な名前
print(is_valid_name("田中")) # False(漢字)
print(is_valid_name("tanaka")) # False(英字)
print(is_valid_name("12345")) # False(数字)
print(is_valid_name("")) # False(空文字)- Python 3.7以上
# 依存関係のインストール
pip install hypothesis pytest# 全テストの実行
pytest test_pbt.py
# 詳細なログ出力付きでテスト実行
pytest test_pbt.py -sこのプロジェクトでは、以下の3つの property-based test を実装しています:
-
test_name_validation_logs- 任意のUnicode文字列(1文字以上)を入力として使用
- 不正な文字が含まれている場合は必ず失敗し、有効な文字のみの場合は成功することを確認
- 包括的な文字列検証を行う
-
test_name_validation_accepts_valid_japanese- ひらがなのみ、またはカタカナのみで構成された文字列を生成
- 生成された文字列が必ず検証を通過することを確認
-
test_name_validation_accepts_mixed_japanese- ひらがな、カタカナ、長音記号が混在した文字列を生成
- 混在した文字列でも必ず検証を通過することを確認
- 現実的なキャラクター名パターンをテスト
# 詳細なログ出力でテスト実行
pytest test_pbt.py::test_name_validation_logs -s
# 特定のテストのみ実行
pytest test_pbt.py::test_name_validation_accepts_valid_japanese -v
# 混在テストのみ実行
pytest test_pbt.py::test_name_validation_accepts_mixed_japanese -v
# 全テストを詳細出力で実行
pytest test_pbt.py -vHIRAGANA_KATAKANA_PATTERN = re.compile(r'^[\u3040-\u309F\u30A0-\u30FFー]+$')\u3040-\u309F: ひらがなの範囲\u30A0-\u30FF: カタカナの範囲ー: 長音記号
- 包括的なテスト: 手動では思いつかない多様な入力パターンでテスト
- エッジケースの発見: 予期しない境界値での動作を自動的に検証
- 回帰テストの強化: 変更後も同じ性質が保たれることを確認
@given(st.text(alphabet=your_custom_alphabet))
def test_your_property(input_text):
# あなたのテストロジック
assert some_property(input_text)# 特定の文字セットを使用した文字列生成
custom_strategy = st.text(
alphabet=st.characters(
min_codepoint=0x3040,
max_codepoint=0x309F
),
min_size=1,
max_size=10
)このプロジェクトはサンプルコードとして提供されています。
バグ報告や機能改善の提案は、GitHubのIssueまたはPull Requestでお気軽にお寄せください。