下面是一个 Python 实现的 NextDate 函数:
```Python
def next_date(year, month, day):
if not (1 <= year <= 9999 and 1 <= month <= 12 and 1 <= day <= 31):
return "Invalid date!"
if month in [1, 3, 5, 7, 8, 10, 12]:
last_day = 31
elif month in [4, 6, 9, 11]:
last_day = 30
elif year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
last_day = 29
else:
last_day = 28
if day == last_day:
if month == 12:
return (year + 1, 1, 1)
else:
return (year, month + 1, 1)
elif day < last_day:
return (year, month, day + 1)
else:
return "Invalid date!"
```
下面是 White-box testing 设计的测试用例:
语句覆盖:
| Test Case | Input | Expected Output |
| --- | --- | --- |
| 1 | year=2021, month=6, day=18 | (2021, 6, 19) |
| 2 | year=2021, month=2, day=28 | (2021, 3, 1) |
判定覆盖:
| Test Case | Input | Expected Output |
| --- | --- | --- |
| 1 | year=2000, month=2, day=29 | (2000, 3, 1) |
| 2 | year=2100, month=2, day=28 | (2100, 3, 1) |
| 3 | year=2021, month=6, day=31 | "Invalid date!" |
条件覆盖:
| Test Case | Input | Expected Output |
| --- | --- | --- |
| 1 | year=2021, month=6, day=18 | (2021, 6, 19) |
| 2 | year=2021, month=2, day=28 | (2021, 3, 1) |
| 3 | year=2000, month=2, day=29 | (2000, 3, 1) |
| 4 | year=2100, month=2, day=28 | (2100, 3, 1) |
| 5 | year=2021, month=6, day=31 | "Invalid date!" |
判定/条件覆盖:
| Test Case | Input | Expected Output |
| --- | --- | --- |
| 1 | year=2000, month=2, day=29 | (2000, 3, 1) |
| 2 | year=2100, month=2, day=28 | "Invalid date!" |
组合覆盖:
| Test Case | Input | Expected Output |
| --- | --- | --- |
| 1 | year=2021, month=6, day=18 | (2021, 6, 19) |
| 2 | year=2021, month=2, day=28 | (2021, 3, 1) |
| 3 | year=2000, month=2, day=29 | (2000, 3, 1) |
| 4 | year=2100, month=2, day=28 | "Invalid date!" |
| 5 | year=2021, month=6, day=31 | "Invalid date!" |
路径覆盖:
| Test Case | Input | Expected Output |
| --- | --- | --- |
| 1 | year=2021, month=6, day=18 | (2021, 6, 19) |
| 2 | year=2021, month=2, day=28 | (2021, 3, 1) |
| 3 | year=2000, month=2, day=29 | (2000, 3, 1) |
| 4 | year=2100, month=2, day=28 | "Invalid date!" |
| 5 | year=2021, month=6, day=31 | "Invalid date!" |