使用Junit输出对象的测试方法

时间:2016-10-15 13:03:19

标签: java unit-testing junit

截至今天,我一直在研究单元测试并遇到障碍。我有一个给定的方法,我想用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()方法,但这似乎没有什么区别。

3 个答案:

答案 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);
}