### Question:
Money implements ValueObject { public Money subtract(Money money){ checkInput(money); if (getTotalFee() < money.getTotalFee()){ throw new IllegalArgumentException("money can not be minus"); } return Money.apply(this.getTotalFee() - money.getTotalFee(), this.getFeeType()); } private  Money(); private  Money(Long totalFee, String feeType); static Money apply(Long totalFee); static Money apply(Long totalFee, String feeType); Money add(Money money); Money subtract(Money money); Money multiply(int var); List<Money> split(int count); static final String DEFAULT_FEE_TYPE; }### Answer:
@Test public void subtract() { Money m1 = Money.apply(300L); Money m2 = Money.apply(200L); Money money = m1.subtract(m2); Assert.assertEquals(100L, money.getTotalFee().longValue()); Assert.assertEquals(m1.getFeeType(), money.getFeeType()); Assert.assertEquals(m2.getFeeType(), money.getFeeType()); }