Write unit tests for a pricing function.
Assesses fundamental understanding of Software Testing & QA conventions, runtime behavior, and memory/performance considerations.
Hiring managers look for precision, avoidance of ambiguous jargon, and ability to explain trade-offs under real production conditions.
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.
Candidate Response Strategy & Interview Tips
- Start with a concise one-sentence summary: Deliver a direct, confident answer first before expanding into nuances.
- Demonstrate real-world trade-offs: Discuss where this approach excels and when you would avoid it in production systems.
- Discuss complexity & edge cases: Proactively explain time/space complexity or boundary conditions (null values, scale limits).
- Prepare for interviewer follow-ups: Technical hiring panels frequently probe deeper into concurrency, backward compatibility, or alternative libraries.