为什么.equals方法在两个相同的值对象上失败?

Rac*_*hel 2 java unit-testing equals

我创建了一个值对象MarketVO,该值对象的两个实例具有相同的元素,每个元素的值相同.

我的值对象类是:

public class MarketVO {

    private double floatAmt;
    private Date marketDate;
    private long marketCap;
}
Run Code Online (Sandbox Code Playgroud)

以下是值:

returnedData:

FloatAmt: 247657.5418618201, MarketCap: 5249164,
MarketDate: 2011-07-29 00:00:00.0 
Run Code Online (Sandbox Code Playgroud)

expectedData:

FloatAmt: 247657.5418618201, MarketCap: 5249164, 
MarketDate: 2011-07-29 00:00:00.0
Run Code Online (Sandbox Code Playgroud)

现在在我的单元测试类中,我想断言我的返回和预期类型是相同的,包含相同顺序的相同值,所以我正在做类似的事情

assertTrue(returnedData.equals(expectedData)),现在这是回归false价值,但如果我这样做

assertEquals(testObject.getfloatAmt(), testObject2.getfloatAmt());
assertEquals(testObject.getmarketCap(), testObject2.getmarketCap());
assertEquals(testObject.getmarketDate(), testObject2.getmarketDate());
Run Code Online (Sandbox Code Playgroud)

这个测试通过,所以我不确定为什么.equals方法不在这里工作?有什么建议?

更新:我想在此强调我们正在使用它进行单元测试.

aio*_*obe 11

.equals比较对象引用的默认实现,而不是对象内容.

您可能希望覆盖equals(和hashCode)方法.像这样的东西:

public class MarketVO {

    private double floatAmt;
    private Date marketDate;
    private long marketCap;

    @Override
    public boolean equals(Object o) {
        if (!(o instanceof MarketVO))
            return false;
        MarketVO other = (MarketVO) o;
        return other.floatAmt == floatAmt &&
               other.marketDate.equals(marketDate) &&
               other.marketCap == marketCap;
    }

    @Override
    public int hashCode() {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)