我有两个自定义日期类(我们称它们为DateV1
和DateV2
),一个一个是 super,另一个是 sub,两者实现完全相同的方法。
从 JUnit 4.x 开始,参数化测试似乎提供了一种在单个测试类中测试两个类的方法(尽管有些人似乎觉得参数化测试令人困惑并且通常会避开它们)。 p>
因为我是 JUnit
(事实上,Java
)的新手,而且除了最简单的测试之外什么也没写,所以我想听听更多精通 JUnit
的用户如何处理此类情况。
我一直在 JUnit In Action,第 2 版,曼宁,2010 年 7 月 中复习理论,但我很难理解如何在 super /子场景中使用它。
我没有包含代码也就不足为奇了,因为坦率地说,我目前没有任何代码。我不是要微波代码,但我会很感激一些指示,这样我就可以继续我的快乐之旅,而不是编写一堆样板文件。
最佳答案
假设您有这样的 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());
}
}
但是,有一个重要的问题:您的父类(super class)和子类(DateV1
和 DateV2
)是否应该以完全相同的方式进行测试? DateV2
类是否提供与其父类(super class) DateV1
相同的功能?完全?如果这些类之间的行为完全没有区别,为什么要有这两个呢?如果两者之间存在差异,则应通过测试解决。
关于java - 用一个测试类测试父类(super class)和子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19618407/