Java 尝试比较同一类中的两个对象时发生AssertionFailedError错误(在重写Equals()和Hashcode()之后)

Java 尝试比较同一类中的两个对象时发生AssertionFailedError错误(在重写Equals()和Hashcode()之后),java,maven,junit,assertj,Java,Maven,Junit,Assertj,我第一次尝试重写我的类(Money)来检查特定属性上的两个对象。 第二次,我试图检查同一类中的两个相同对象(钱) 但它不起作用 我尝试重写Equals()和Hashcode() 在头等舱(钱)。 在文件的顶部 公共静态最终货币半第纳尔=新货币(BigDecimal.valueOf(0.50)); 公共货币; 公共静态最终货币零=新货币(BigDecimal.0); 公共静态货币mInsideMachine=新货币(BigDecimal.ZERO); @凌驾 公共布尔等于(对象o){ 如果(o

我第一次尝试重写我的类(Money)来检查特定属性上的两个对象。 第二次,我试图检查同一类中的两个相同对象(钱) 但它不起作用

我尝试重写Equals()和Hashcode()

在头等舱(钱)。 在文件的顶部

公共静态最终货币半第纳尔=新货币(BigDecimal.valueOf(0.50));
公共货币;
公共静态最终货币零=新货币(BigDecimal.0);
公共静态货币mInsideMachine=新货币(BigDecimal.ZERO);

@凌驾
公共布尔等于(对象o){
如果(o==this)返回true;
如果(!(o货币实例)){
返回false;
}
货币=(货币)o;
返回新的EqualBuilder()
.append(this.current\u Money,Money.current\u Money)
.isEquals();
}
@凌驾
/*公共int hashCode(){
返回Objects.hash(当前的钱);
}*/
公共int hashCode(){
返回新的HashCodeBuilder(17,37)
.append(当前资金)
.toHashCode();
}
我用来检查对象的命令是

assertThat(snackMachine.moneyInside()).isEqualTo(Money.HALF_第纳尔);
*注意:对象snackMachine来自类snackMachine,但返回的是Money的类。 这是moneyInside的代码

moneyInside()公共资金{
退钱。机器;
}
第二个文件(不可更改)(SnackMachine类)单元测试的代码

@测试
在插入足够的钱后不要买零食,然后插入的钱应该等于插入的钱(){
snackMachine.insertMoney(货币,四分之一第纳尔);
snackMachine.insertMoney(货币,四分之一第纳尔);
零食机。买零食(零食型。嚼口香糖);
System.out.println(“Moneyinside(单元测试)”+Money.mInsideMachine.current_Money.toString();
System.out.println(“Money half dinar(单元测试)”+Money.half_dinar.current_Money.toString();
//assertThat(snackMachine.moneyInTransaction()).isEqualTo(Money.ZERO);
资产(snackMachine.moneyInside()).isEqualTo(Money.HALF_第纳尔);
}
我添加了一些代码来打印值,输出为:

Moneyinside(单元测试)0.50
货币半第纳尔(单位检验)0.5
org.opentest4j.AssertionFailedError:
期望:
等于:
但事实并非如此。
预期:com.progressoft.归纳。Money@311
实际:com.progressoft.inclusion。Money@885

这里的问题是0.5不等于0.50,除非您使用
isEqualByComparingTo​。看

例如:

 // assertion will pass because 8.0 is equal to 8.00 using BigDecimal.compareTo(BigDecimal)
 assertThat(new BigDecimal("8.0")).isEqualByComparingTo(new BigDecimal("8.00"));
 // assertion fails 
 assertThat(new BigDecimal("8.0")).isEqualTo(new BigDecimal("8.00"));

我们开始。。。。。