利用下方代码对 validateDate进行单元测试(参数化测试) public boolean isLoop(int y) { //四年一闰,百年不闰,四百年再闰 boolean temp; temp = (y % 4 == 0) && (y % 100 != 0); temp = temp || (y % 400 == 0); return temp; } public boolean validateDate(int y, int m, int d) { boolean result = true;if (y == 0) {result = false; return result; } switch (m) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: if ((d > 31) | (d < 1)) { result = false; } break; case 4: case 6: case 9: case 11: if ((d > 30) | (d < 1)) { result = false; } break; case 2: if (isLoop(y)) { if ((d > 29) | (d < 1)) { result = false; } } else { if ((d > 28) | (d < 1)) { result = false; } } break; default: result = false; } return result; }
时间: 2024-02-14 18:11:33 浏览: 118
好的,以下是利用 JUnit 进行参数化测试的示例代码:
```java
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class DateValidatorTest {
private int year;
private int month;
private int day;
private boolean expected;
public DateValidatorTest(int year, int month, int day, boolean expected) {
this.year = year;
this.month = month;
this.day = day;
this.expected = expected;
}
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{ 2000, 1, 1, true },
{ 2001, 2, 29, false }, // non-leap year
{ 2004, 2, 29, true }, // leap year
{ 2100, 2, 29, false }, // non-leap century year
{ 2000, 4, 31, false }, // invalid day
{ 2000, 13, 1, false }, // invalid month
{ 0, 1, 1, false } // invalid year
});
}
@Test
public void testValidateDate() {
DateValidator validator = new DateValidator();
assertEquals(expected, validator.validateDate(year, month, day));
}
@Test
public void testIsLoop() {
DateValidator validator = new DateValidator();
assertTrue(validator.isLoop(2000));
assertTrue(validator.isLoop(2004));
assertFalse(validator.isLoop(2001));
assertFalse(validator.isLoop(2100));
}
}
```
在这个示例代码中,我们使用了 JUnit 的参数化测试功能。首先,在 `DateValidatorTest` 类上加上了 `@RunWith(Parameterized.class)` 注解,表示我们将使用 `Parameterized` 这个运行器来运行测试。然后,我们定义了一个构造函数,接受四个参数:年份、月份、日期和预期结果。这个构造函数将在测试开始前被调用,传入所有参数组合的值,用于初始化测试实例。接着,我们定义了一个 `data()` 方法,用于返回所有参数组合的值。这个方法使用了 `@Parameters` 注解,表示这个方法将返回测试数据。最后,我们定义了两个测试方法,一个用于测试 `validateDate()` 方法,一个用于测试 `isLoop()` 方法。在测试 `validateDate()` 方法时,我们使用 `assertEquals()` 方法来比较实际结果和预期结果是否相等。
这样,我们就可以使用上面的示例代码,快速地对 `validateDate()` 方法进行参数化测试,测试各种不同的参数组合,以确保方法能够正确地处理各种输入。
阅读全文