### Question:
Money implements FxConvertible<Money>, Comparable<Money>, Serializable { public Money plus(Money amountToAdd) { ArgChecker.notNull(amountToAdd, "amountToAdd"); ArgChecker.isTrue(amountToAdd.getCurrency().equals(currency), "Unable to add amounts in different currencies"); return new Money(currency, amount.add(amountToAdd.amount)); } private  Money(Currency currency, BigDecimal amount); static Money zero(Currency currency); static Money of(CurrencyAmount currencyAmount); static Money of(Currency currency, double amount); static Money of(Currency currency, BigDecimal amount); @FromString static Money parse(String amountStr); Currency getCurrency(); BigDecimal getAmount(); Money plus(Money amountToAdd); Money minus(Money amountToSubtract); Money multipliedBy(long valueToMultiplyBy); boolean isZero(); boolean isPositive(); boolean isNegative(); CurrencyAmount toCurrencyAmount(); Money convertedTo(Currency resultCurrency, BigDecimal fxRate); @Override Money convertedTo(Currency resultCurrency, FxRateProvider rateProvider); @Override int compareTo(Money other); @Override boolean equals(Object obj); @Override int hashCode(); @Override @ToString String toString();  }### Answer:
@Test public void testPlus() throws Exception { Money a = Money.of(GBP, 1.23); Money b = Money.of(GBP, 2.34); assertThat(a.plus(b)).isEqualTo(Money.of(GBP, 3.57)); assertThat(b.plus(a)).isEqualTo(Money.of(GBP, 3.57)); }