请编写代码对NextDay进行JUnit测试并设计测试用例使其满足100%函数覆盖并写出相应的NextDay源代码
时间: 2024-02-15 18:04:48 浏览: 26
以下是NextDay源代码:
```java
public class NextDay {
public static String nextDay(int year, int month, int day) {
if (year <= 0 || month <= 0 || month > 12 || day <= 0 || day > 31) {
return "Invalid input";
}
if (month == 2) {
if (isLeapYear(year)) {
if (day > 29) {
return "Invalid input";
}
} else {
if (day > 28) {
return "Invalid input";
}
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
if (day > 30) {
return "Invalid input";
}
}
if (day == 31 && (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10)) {
return String.format("%d-%02d-%02d", year, month + 1, 1);
} else if (day == 30 && month == 4 || month == 6 || month == 9 || month == 11) {
return String.format("%d-%02d-%02d", year, month + 1, 1);
} else if (day == 29 && month == 2 && isLeapYear(year)) {
return String.format("%d-%02d-%02d", year, month + 1, 1);
} else if (day == 28 && month == 2 && !isLeapYear(year)) {
return String.format("%d-%02d-%02d", year, month + 1, 1);
} else {
return String.format("%d-%02d-%02d", year, month, day + 1);
}
}
private static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
}
```
以下是JUnit测试代码和测试用例:
```java
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class NextDayTest {
@Test
public void testInvalidInput() {
assertEquals("Invalid input", NextDay.nextDay(0, 0, 0));
assertEquals("Invalid input", NextDay.nextDay(2021, 0, 0));
assertEquals("Invalid input", NextDay.nextDay(2021, 13, 0));
assertEquals("Invalid input", NextDay.nextDay(2021, 2, 29));
assertEquals("Invalid input", NextDay.nextDay(2021, 4, 31));
}
@Test
public void testLeapYear() {
assertEquals("2020-03-01", NextDay.nextDay(2020, 2, 29));
assertEquals("2024-02-29", NextDay.nextDay(2024, 2, 28));
}
@Test
public void testMonthsWith31Days() {
assertEquals("2021-05-01", NextDay.nextDay(2021, 4, 30));
assertEquals("2021-07-01", NextDay.nextDay(2021, 6, 30));
assertEquals("2021-08-01", NextDay.nextDay(2021, 7, 31));
}
@Test
public void testMonthsWith30Days() {
assertEquals("2021-11-01", NextDay.nextDay(2021, 10, 31));
assertEquals("2021-06-01", NextDay.nextDay(2021, 5, 31));
assertEquals("2021-04-01", NextDay.nextDay(2021, 3, 31));
}
@Test
public void testFebruary() {
assertEquals("2021-03-01", NextDay.nextDay(2021, 2, 28));
assertEquals("2020-02-29", NextDay.nextDay(2020, 2, 28));
assertEquals("2021-03-01", NextDay.nextDay(2020, 2, 29));
}
}
```
这些测试用例可以覆盖代码中的所有分支,从而实现100%的函数覆盖。