根据输入的年份和月份判断月份的天数。若月份不在有效范围之内,应提示:“月份输入不正确。”。月份不为2月,根据输入月份输出对应的月份天数。月份为2月,根据年份判断如为普通闰年,输出2月份正确天数;如为世纪闰年,输出2月份正确天数;不为闰年输出2月份天数。返回结果格式:“year年month月份的天数是days天。”year、month为传入的值,days为判断得到的天数值。其中变量year、month均须为正整数。编写程序代码,使用JUnit框架编写测试类对编写的程序代码进行测试,测试类中设计最少的测试数据满足语句覆盖测试,每条测试数据需要在测试类中编写一个测试方法。使用assertThat中equalTo断言判断返回期望结果和实际返回是否一致。
时间: 2024-03-05 21:49:15 浏览: 170
输入月份,显示天数C++
以下是 Java 代码实现:
```java
public class MonthDays {
public static String getMonthDays(int year, int month) {
int days = 0;
if (month < 1 || month > 12) {
return "月份输入不正确。";
}
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
days = 29;
} else {
days = 28;
}
break;
}
return year + "年" + month + "月份的天数是" + days + "天。";
}
}
```
以下是使用 JUnit 框架编写的测试类:
```java
import org.junit.Test;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;
public class MonthDaysTest {
@Test
public void test31Days() {
assertThat(MonthDays.getMonthDays(2021, 1), equalTo("2021年1月份的天数是31天。"));
assertThat(MonthDays.getMonthDays(2021, 3), equalTo("2021年3月份的天数是31天。"));
assertThat(MonthDays.getMonthDays(2021, 5), equalTo("2021年5月份的天数是31天。"));
assertThat(MonthDays.getMonthDays(2021, 7), equalTo("2021年7月份的天数是31天。"));
assertThat(MonthDays.getMonthDays(2021, 8), equalTo("2021年8月份的天数是31天。"));
assertThat(MonthDays.getMonthDays(2021, 10), equalTo("2021年10月份的天数是31天。"));
assertThat(MonthDays.getMonthDays(2021, 12), equalTo("2021年12月份的天数是31天。"));
}
@Test
public void test30Days() {
assertThat(MonthDays.getMonthDays(2021, 4), equalTo("2021年4月份的天数是30天。"));
assertThat(MonthDays.getMonthDays(2021, 6), equalTo("2021年6月份的天数是30天。"));
assertThat(MonthDays.getMonthDays(2021, 9), equalTo("2021年9月份的天数是30天。"));
assertThat(MonthDays.getMonthDays(2021, 11), equalTo("2021年11月份的天数是30天。"));
}
@Test
public void testLeapYear() {
assertThat(MonthDays.getMonthDays(2020, 2), equalTo("2020年2月份的天数是29天。"));
assertThat(MonthDays.getMonthDays(2000, 2), equalTo("2000年2月份的天数是29天。"));
}
@Test
public void testCommonYear() {
assertThat(MonthDays.getMonthDays(2021, 2), equalTo("2021年2月份的天数是28天。"));
assertThat(MonthDays.getMonthDays(1900, 2), equalTo("1900年2月份的天数是28天。"));
}
@Test
public void testInvalidMonth() {
assertThat(MonthDays.getMonthDays(2021, 13), equalTo("月份输入不正确。"));
assertThat(MonthDays.getMonthDays(2021, 0), equalTo("月份输入不正确。"));
assertThat(MonthDays.getMonthDays(2021, -1), equalTo("月份输入不正确。"));
}
}
```
测试数据设计如下:
- test31Days() 方法:测试1月、3月、5月、7月、8月、10月、12月。
- test30Days() 方法:测试4月、6月、9月、11月。
- testLeapYear() 方法:测试闰年2月份。
- testCommonYear() 方法:测试非闰年2月份。
- testInvalidMonth() 方法:测试月份输入不正确的情况,包括输入13月、0月和负数月份。
以上测试数据满足语句覆盖测试,每条测试数据在测试类中对应一个测试方法。使用 assertThat 中的 equalTo 断言判断返回期望结果和实际返回是否一致。
阅读全文