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

标签 java unit-testing equals

我创建了一个值对象 MarketVO并且这个值对象的两个实例具有相同的元素和每个元素的相同值。

我的值对象类是:

public class MarketVO {

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

以下是值:

返回数据:
FloatAmt: 247657.5418618201, MarketCap: 5249164,
MarketDate: 2011-07-29 00:00:00.0 

预期数据:
FloatAmt: 247657.5418618201, MarketCap: 5249164, 
MarketDate: 2011-07-29 00:00:00.0

现在在我的单元测试类中,我想断言我的返回类型和预期类型相同,包含相同顺序的相同值,所以我正在做类似的事情
assertTrue(returnedData.equals(expectedData)) ,现在返回 false值(value),但如果我这样做
assertEquals(testObject.getfloatAmt(), testObject2.getfloatAmt());
assertEquals(testObject.getmarketCap(), testObject2.getmarketCap());
assertEquals(testObject.getmarketDate(), testObject2.getmarketDate());

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

更新:我想在这里强调,我们正在使用它来做 单元测试 .

最佳答案

.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() {
        ...
    }
}

关于java - 为什么 .equals 方法在两个相同的值对象上失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6877947/

相关文章:

JavaFX 按钮垃圾邮件 MouseExit 和 MouseEntered

Java 构造函数被多次调用

java - String 的 char 表示形式是否不同且固定?

java - HtmlUnitDriver 似乎缺少 HTTP 组件?

java - 如何在 OSGi 中使用 servlet

Java 编译器意外 "incompatible types"错误

c# - 带有 Entity Framework 的 AutoFixture - 将 int 映射到枚举

java - Robolectric 单元测试自定义布局上的 ClassCastException

java - Junit of equals 方法

java - HashSet 添加了两个对象,它们为 equals() 返回 true 并且在 Java 中具有相同的哈希码