我有两个自定义日期类(我们称之为DateV1
和DateV2
),一个是超级,另一个是子,两者都采用完全相同的方法
从JUnit 4.x开始,参数化测试似乎提供了在单个测试类中测试两个类的方法(尽管有些人似乎发现参数化测试令人困惑并且通常避开它们)。
因为我是JUnit
的新手(事实上,Java
)并且除了最简单的测试之外什么都没写,我想听听更为精通的JUnit
用户如何应对这些情况。
我一直在 JUnit In Action,第2版,Manning,2010年7月中讨论这个理论,但我很难看到如何在超级/子场景中使用它。
我不会包含代码,因为坦率地说我现在没有代码。我不是要求微波代码,但有些指针会受到赞赏,所以我可以按照我的快乐方式而不是写一堆样板。
答案 0 :(得分:1)
假设您有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
相同的功能?如果这些类之间的行为绝对没有差异,为什么要这两个?如果两者之间存在差异,则应通过测试解决。