Write unit tests for a pricing function.
Given a pricing function, write focused tests with JUnit and AssertJ.
class PriceCalculator {
BigDecimal finalPrice(BigDecimal base, int qty, boolean member) {
if (qty <= 0) throw new IllegalArgumentException("qty");
BigDecimal total = base.multiply(BigDecimal.valueOf(qty));
return member ? total.multiply(new BigDecimal("0.9")) : total;
}
}
class PriceCalculatorTest {
private final PriceCalculator calc = new PriceCalculator();
@Test void multipliesByQuantity() {
assertThat(calc.finalPrice(new BigDecimal("10"), 3, false))
.isEqualByComparingTo("30");
}
@Test void appliesMemberDiscount() {
assertThat(calc.finalPrice(new BigDecimal("10"), 1, true))
.isEqualByComparingTo("9");
}
@Test void rejectsNonPositiveQuantity() {
assertThatThrownBy(() -> calc.finalPrice(BigDecimal.TEN, 0, false))
.isInstanceOf(IllegalArgumentException.class);
}
}
The tests cover the happy path, a rules branch and an invalid input, use names that state the behaviour, and avoid floating-point equality by comparing BigDecimal values.