假设你有这样的DateV1
和DateV2
:
public class DateV1 {
protected final Date date;
public DateV1(Date date) {
this.date = date;
}
public int getYear() {
return 1900 + date.getYear();
}
}
public class DateV2 extends DateV1 {
private Calendar cal;
public DateV2(Date date) {
super(date);
cal = Calendar.getInstance();
cal.setTime(date);
}
public int getYear() {
return cal.get(Calendar.YEAR);
}
}
测试可能如下所示:
@RunWith(value = Parameterized.class)
public class DateTest {
private DateV1 date;
public DateTest(DateV1 date) {
this.date = date;
}
@Parameters
public static Collection<Object[]> data() {
final Date currDate = new Date();
Object[][] data = new Object[][] { { new DateV1(currDate) }, { new DateV2(currDate) } };
return Arrays.asList(data);
}
@Test
public void getYearShouldReturn2013() {
Assert.assertEquals(2013, date.getYear());
}
}
但是,有一个重要的问题:您的超类和子类 (DateV1
和DateV2
) 是否应该以完全相同的方式进行测试?该类是否DateV2
提供与其超类完全相同的功能DateV1
?如果这些类之间的行为绝对没有区别,为什么会有两者?如果两者之间存在差异,则应通过您的测试来解决。