已知公元 1 年 1 月 1 日是星期一。编写一个程序,只要输入年月日,就能回答那天是星期几。 设计程序完成下列要求。 (1)以语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖测试方法设计测试用例。 (2)使用 JUnit 编写测试用例,并采用参数化设置测试语句覆盖方法,要求使用Junit中的常用注释。
时间: 2024-02-28 11:52:38 浏览: 86
以下是针对题目要求的测试用例设计和JUnit测试方法的实现:
测试用例设计:
1. 语句覆盖:
输入测试用例:
- 2022年4月1日
- 2000年2月29日
- 2021年2月28日
2. 判定覆盖:
输入测试用例:
- 1900年1月1日
- 2000年2月29日
- 2021年2月28日
3. 条件覆盖:
输入测试用例:
- 1900年1月1日
- 2000年2月29日
- 2021年2月28日
4. 判定/条件覆盖:
输入测试用例:
- 1900年1月1日
- 2000年2月29日
- 2021年2月28日
5. 组合覆盖:
输入测试用例:
- 2000年2月29日
- 2021年2月28日
- 2022年4月1日
6. 路径覆盖:
输入测试用例:
- 1900年1月1日
- 2000年2月29日
- 2021年2月28日
JUnit测试方法实现:
```java
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import java.util.Arrays;
import java.util.Collection;
import static org.junit.Assert.assertEquals;
@RunWith(Parameterized.class)
public class WeekdayCalculatorTest {
private int year;
private int month;
private int day;
private String expected;
public WeekdayCalculatorTest(int year, int month, int day, String expected) {
this.year = year;
this.month = month;
this.day = day;
this.expected = expected;
}
@Parameters
public static Collection<Object[]> getTestData() {
return Arrays.asList(new Object[][]{
{2022, 4, 1, "星期五"},
{2000, 2, 29, "星期二"},
{2021, 2, 28, "星期日"},
{1900, 1, 1, "星期二"},
{2000, 12, 31, "星期日"},
{2022, 1, 1, "星期日"}
});
}
@Test
public void testGetWeekday() {
WeekdayCalculator calculator = new WeekdayCalculator();
String actual = calculator.getWeekday(year, month, day);
assertEquals(expected, actual);
}
}
```
注意:在JUnit测试方法中,我们使用了参数化测试来设置测试数据,并且使用了常用的注释如@RunWith、@Test、@Parameters。在assertEquals中,我们将期望的结果和实际计算的结果进行比较,如果不相等则测试不通过。
阅读全文