截至今天,我一直在研究单元测试并遇到障碍。我有一个给定的方法,我想用unittest测试,该方法可能有也可能没有错误。方法是这样的:
@Override
public ITimeSpan intersectionWith(ITimeSpan timeSpan) {
ITime begintime, endtime;
if (bt.compareTo(timeSpan.getBeginTime()) > 0) {
begintime = bt;
} else {
begintime = timeSpan.getBeginTime();
}
if (et.compareTo(timeSpan.getEndTime()) < 0) {
endtime = et;
} else {
endtime = timeSpan.getEndTime();
}
// aangepast van >= naar <=
if (begintime.compareTo(endtime) <= 0) {
return null;
}
return new TimeSpan(begintime, endtime);
}
该方法应该输出由两个时间跨度的重叠时间构成的新时间跨度。我已经为这种方法编写了单元测试,如下所示:
@Test
public void testIntersectionWith() {
System.out.println("intersectionWith");
ITimeSpan timeSpan = new TimeSpan(new Time (2000,4,4,4,4), new Time(2000,5,5,5,5));
TimeSpan instance3 = new TimeSpan(new Time (2000,4,4,4,4), new Time(2000,8,8,8,8));
ITimeSpan expResult3 = new TimeSpan(new Time (2000,4,4,4,4), new Time(2000,5,5,5,5));
ITimeSpan result3 = instance3.intersectionWith(timeSpan);
assertEquals( result3, expResult3);
}
为了与对象进行比较,我在TimeSpan类中重写了equals方法,如下所示:
@Override
public boolean equals(Object obj){
if (obj == null){
return false;
}
final TimeSpan other = (TimeSpan) obj;
if (this.bt == other.bt && this.et == other.et){
return true;
}
return false;
}
在测试中看到给定的时间跨度我希望测试通过,但是你可以猜测它并没有,并且它会返回一个预期的#34;但是&#34;错误。并指出代码行说:
assertEquals( result3, expResult3);
我试图理解为什么与assertEquals的这种比较不起作用,看起来重写equals方法在这里不起作用。我也试图覆盖hashCode()方法,但这似乎没有什么区别。
答案 0 :(得分:1)
你的equals方法错了,你在其中使用==。
试试这个:
if (this.bt.equals( other.bt) && this.et .equals( other.et)){
答案 1 :(得分:1)
我看到了几个问题。首先,在equals方法中使用.equals(),而不是==来比较相等性。其次,不是现在会导致错误的东西,而是你需要在你的equals方法中输入check,或者你可以得到一个CCE。我建议你让你的ID自动生成equals方法。仅供参考,这也应该创建一个你缺少的hashCode方法。
答案 2 :(得分:1)
@M大提琴,我认为罪魁祸首将在这里&#34;返回新的TimeSpan(开始时间,结束时间);&#34;
public ITimeSpan intersectionWith(ITimeSpan timeSpan) {
ITime begintime, endtime;
if (bt.compareTo(timeSpan.getBeginTime()) > 0) {
begintime = bt;
} else {
begintime = timeSpan.getBeginTime();
}
if (et.compareTo(timeSpan.getEndTime()) < 0) {
endtime = et;
} else {
endtime = timeSpan.getEndTime();
}
// aangepast van >= naar <=
if (begintime.compareTo(endtime) <= 0) {
return null;
}
//i think the culprit is here, plz print the begintime, endtime and check what are the values its passing other than this everything is working fine
return new TimeSpan(begintime, endtime);
}