An Extract and Override Exercise
Extract And Override Solution
If you want to take a look at our solution, here you go!
We've changed accountId to be protected.And we've extracted two awkward parts of methods:
public class Order {
public void add(LineItem item) {
items.add(item);
netTotal = netTotal.add(item.getExtendedAmount());
weight = weight.add(item.getExtendedWeight());
reserveProduct(item);
} public String getOrderId() {
if (orderId == null)
orderId = getOrderIdFromGenerator();
return orderId;
} protected void reserveProduct(LineItem item) {
InventoryControl.get().reserveProduct(getOrderId(),item.getSku(), item.getQuantity());
}
protected String getOrderIdFromGenerator() {
return IdGenerator.getOrderId(accountId);
}
}
We created
TestableOrder
right in the OrderTest
file, and overrode the two awkward parts.
public class OrderTest {
private static class TestableOrder extends Order {
public TestableOrder(String accountId) {
super(accountId);
} @Override
protected String getOrderIdFromGenerator() {
return accountId + ":10001";
} @Override
protected void reserveProduct(LineItem item) {
}
}
}
public class OrderTest {
@BeforeEach
public void setUp() {
…
order = new TestableOrder("ACCOUNTID");
}
}
You can download our solution here:
(Reading...)
Formatting Hints:
To format... | use this markup: |
---|---|
source code | {source:lang=java|lineNumbers=false}...{source} (Supported languages: java, cpp, csharp, c, python.) |
bold text | __some text__ |
italicized text | ~~some text~~ |
underlined text | @@some text@@ |
a method or class name | ``myMethod(...)`` |