即使它们看起来相同,JUnit assertEquals()也会失败

时间:2013-11-12 02:26:34

标签: java netbeans junit

我是使用JUnit的新手,所以我可能会遗漏一些完全基本的东西,但以下是我收到的输出:

Testcase: testDateFromDayOfYear(p3.DateADTest): FAILED
expected: p3.DateAD<Saturday, 1 January, 2000> but was: p3.DateAD<Saturday, 1 January, 2000>
junit.framework.AssertionFailedError: expected: p3.DateAD<Saturday, 1 January, 2000> but was: p3.DateAD<Saturday, 1 January, 2000>
    at p3.DateADTest.testDateFromDayOfYear(DateADTest.java:85)

我还比较了两个对象:

System.out.println("*******************************************");
System.out.println(result.getClass());
System.out.println(expResult.getClass());
System.out.println("*******************************************");

*******************************************
class p3.DateAD
class p3.DateAD
*******************************************

有人可以提供一些建议吗?

测试方法的完整代码:

@Test
public void testDateFromDayOfYear() {
    System.out.println("dateFromDayOfYear");
    short dayOfYear = (short)1;
    short year = (short)2000;
    DateAD instance = new DateAD();
    DateAD expResult = new DateAD(dayOfYear, (short)1, year);
    DateAD result = instance.dateFromDayOfYear(dayOfYear, year);
    System.out.println("*******************************************");
    System.out.println(result.getClass());
    System.out.println(expResult.getClass());
    System.out.println("*******************************************");
    assertEquals(expResult, result);
}

等于方法:

public boolean equals(Object inputDate) {
    if (this.year == inputDate.year && 
            this.dayOfYear == inputDate.dayOfYear) {
        return true;
    }
    else {
        return false;
    }
} 

1 个答案:

答案 0 :(得分:1)

assertEquals将调用equals,它引用引用类型的内存位置。如果您可以覆盖Equals的{​​{1}}(和getHashCode)方法,则应该这样做。

否则,对构成日期(或以毫秒/纳秒为单位的时间)的小时,分​​钟,天等执行等号检查。

DateAD