投稿/コメントを表示します。

細かいことなのですが、get_first_month_day_of_zodiac_sign()に13を渡したときに{'month': 12, 'day': 22}が返ってくるようです。

以下のように修正してみました。
def get_first_month_day_of_zodiac_sign(month, zodiac_part_dict):
    """各星座の最終日を含む月から、その星座の最初の日を返す

    :return: {'month': 1, 'day': 20} といった形式の辞書
    """
    if month == 1:
        last_month = 12
    elif month >= 12:
        last_month = month
    else:
        last_month = month - 1

    for v in zodiac_part_dict.values():
        if v['month'] == last_month:
            return {'month': last_month, 'day': v['day'] + 1, }
    raise ValueError('Invalid month')

テストコードは以下のようにしてみました。
def test_get_first_month_day_of_zodiac_sign_month_raise_invalid_0():
    """
    get_first_month_day_of_zodiac_sign に 1月未満を渡したときの異常動作を確認する
    """

    zodiac_part_dict = get_zodiac_part_dict()
    with pytest.raises(ValueError):
        get_first_month_day_of_zodiac_sign(0, zodiac_part_dict)


def test_get_first_month_day_of_zodiac_sign_month_raise_invalid_13():
    """
    get_first_month_day_of_zodiac_sign に 13月以上を渡したときの異常動作を確認する
    """

    zodiac_part_dict = get_zodiac_part_dict()
    with pytest.raises(ValueError):
        get_first_month_day_of_zodiac_sign(13, zodiac_part_dict)

2023/08/30 15:42