В первый раз я попытался переопределить свой класс (Деньги), чтобы проверить два объекта на определенный атрибут. во второй раз я попытался проверить два одинаковых объекта из одного класса (Money), но это не сработало.
Я попробовал Overriding Equals () и Hashcode ()
В первом классе(Деньги). Вверху файла.
public static final Money HALF_DINAR = new Money(BigDecimal.valueOf(0.50));
public BigDecimal current_Money;
public static final Money ZERO =new Money(BigDecimal.ZERO);
public static Money mInsideMachine = new Money(BigDecimal.ZERO);
@Override
public boolean equals(Object o) {
if (o == this) return true;
if (!(o instanceof Money)) {
return false;
}
Money money = (Money) o;
return new EqualsBuilder()
.append(this.current_Money,money.current_Money)
.isEquals();
}
@Override
/*public int hashCode() {
return Objects.hash(current_Money);
}*/
public int hashCode(){
return new HashCodeBuilder(17, 37)
.append(current_Money)
.toHashCode();
}
Команда, которую я использую для проверки объектов:
assertThat(snackMachine.moneyInside()).isEqualTo(Money.HALF_DINAR);
* Обратите внимание: объект snackMachine принадлежит к классу SnackMachine, но возвращаетиз класса денег. вот код для moneyInside.
public Money moneyInside() {
return Money.mInsideMachine;
}
Код второго файла (неизменяемый) (класс SnackMachine) Юнит-тест
@Test
void buying_a_snack_after_inserting_just_enough_money_then_the_money_inside_should_equals_to_money_inserted() {
snackMachine.insertMoney(Money.QUARTER_DINAR);
snackMachine.insertMoney(Money.QUARTER_DINAR);
snackMachine.buySnack(SnackType.CHEWING_GUM);
System.out.println("Moneyinside (Unit test)"+Money.mInsideMachine.current_Money.toString());
System.out.println("Money half dinar (Unit test)"+Money.HALF_DINAR.current_Money.toString());
//assertThat(snackMachine.moneyInTransaction()).isEqualTo(Money.ZERO);
assertThat(snackMachine.moneyInside()).isEqualTo(Money.HALF_DINAR);
}
Я добавил некоторый код для печати значений ивывод:
Moneyinside (Unit test)0.50
Money half dinar (Unit test)0.5
org.opentest4j.AssertionFailedError:
Expecting:
<com.progressoft.induction.Money@885>
to be equal to:
<com.progressoft.induction.Money@311>
but was not.
Expected :com.progressoft.induction.Money@311
Actual :com.progressoft.induction.Money@885