利用基路径测试法对 isLoop进行单元测试(参数化测试),是否需要编写桩模块,如果需要请编写。 public class CalcDate { public static int num = 0; public int calcWeek(int y, int m, int d) { if (!validateDate(y, m, d)) { System.out.println("日期格式不正确"); return -1; } if ((y
时间: 2024-03-10 17:49:43 浏览: 58
如何进行单元测试
根据 isLoop 方法的定义,我们知道它需要接收一个对象列表参数,因此需要编写一个对象列表的桩模块,以便进行基路径测试。
假设我们需要测试以下三个基本路径:
1. 第一个 if 语句为真,直接返回 -1。
2. 第一个 if 语句为假,第二个 if 语句为真,调用 calcWeekday 方法并返回结果。
3. 第一个 if 语句为假,第二个 if 语句为假,返回 -1。
我们可以编写一个简单的桩模块来模拟对象列表参数的行为,如下所示:
```
public class DateListStub {
private List<Date> dates;
public DateListStub(List<Date> dates) {
this.dates = dates;
}
public List<Date> getDates() {
return dates;
}
}
```
然后,我们可以编写一个参数化测试来覆盖这三个基本路径:
```
@RunWith(Parameterized.class)
public class CalcDateTest {
private CalcDate calcDate;
private DateListStub dateListStub;
private int expected;
public CalcDateTest(DateListStub dateListStub, int expected) {
this.dateListStub = dateListStub;
this.expected = expected;
}
@Before
public void setUp() {
calcDate = new CalcDate();
}
@Parameterized.Parameters
public static Collection<Object[]> testCases() {
List<Date> dates = new ArrayList<>();
dates.add(new Date(2022, 8, 1));
dates.add(new Date(2022, 8, 2));
dates.add(new Date(2022, 8, 3));
dates.add(new Date(2022, 8, 4));
dates.add(new Date(2022, 8, 5));
dates.add(new Date(2022, 8, 6));
dates.add(new Date(2022, 8, 7));
DateListStub nullStub = new DateListStub(null);
DateListStub emptyStub = new DateListStub(new ArrayList<>());
DateListStub oneStub = new DateListStub(Collections.singletonList(new Date(2022, 8, 1)));
DateListStub twoStub = new DateListStub(Arrays.asList(new Date(2022, 8, 1), new Date(2022, 8, 2)));
DateListStub loopStub = new DateListStub(Arrays.asList(
new Date(2022, 8, 1),
new Date(2022, 8, 2),
new Date(2022, 8, 3),
new Date(2022, 8, 4),
new Date(2022, 8, 5),
new Date(2022, 8, 6),
new Date(2022, 8, 7),
new Date(2022, 8, 1)
));
return Arrays.asList(new Object[][]{
{nullStub, -1},
{emptyStub, -1},
{oneStub, 1},
{twoStub, 2},
{loopStub, -1}
});
}
@Test
public void testCalcWeek() {
assertEquals(expected, calcDate.calcWeek(dateListStub.getDates()));
}
}
```
在这个测试中,我们使用了 Parameterized 测试运行器来执行多个测试用例。我们使用不同的对象列表参数来覆盖三个基本路径。最后,我们断言了计算结果是否符合预期。
阅读全文