SlideShare ist ein Scribd-Unternehmen logo
1 von 4
OCP Supemarket Checkout Kata
Using the OCP rules, write a supermarket checkout controller,
using the following test template:
public class CheckoutTester {
private int price(String... items) {
Checkout checkout = new CheckoutFactory().create();
for (String item : items)
checkout.scan(item);
return checkout.total();
}
@Test
public void emptyBasket() {
assertEquals(0, price(""));
}
}
OCP Supemarket Checkout Kata
An empty basket has a zero price:
@Test
public void emptyBasket() {
assertEquals(0, price(""));
}
A single item has a constant price:
@Test
public void singleItem() {
assertEquals(50, price("A"));
assertEquals(30, price("B"));
assertEquals(20, price("C"));
assertEquals(15, price("D"));
}
Special offers
3 As get a 20p discount:
AA → 100
AAA → 130
AAAA → 180
etc...
2 Bs get a 15p discount:
BB → 45
ABABA → 175
ACABDB → 180
etc...
A starter (A), a main (B) and either pudding (C,D) for 85:
BDA → 85
AADC → 135
AABCA → 180
etc...
OCP Supemarket Checkout Kata
The original problem is here:
http://codekata.pragprog.com/2007/01/kata_nine_back_.html

Weitere ähnliche Inhalte

Mehr von Kevin Rutherford (20)

Making the most of autism
Making the most of autismMaking the most of autism
Making the most of autism
 
Evolving the Kanban Board
Evolving the Kanban BoardEvolving the Kanban Board
Evolving the Kanban Board
 
Don't forget the developers!
Don't forget the developers!Don't forget the developers!
Don't forget the developers!
 
Love and death
Love and deathLove and death
Love and death
 
Connascence hunting
Connascence huntingConnascence hunting
Connascence hunting
 
The 5-day challenge
The 5-day challengeThe 5-day challenge
The 5-day challenge
 
Red, green, ... what now?!
Red, green, ... what now?!Red, green, ... what now?!
Red, green, ... what now?!
 
Pair programming
Pair programmingPair programming
Pair programming
 
Tdd is dead
Tdd is deadTdd is dead
Tdd is dead
 
Hex arch
Hex archHex arch
Hex arch
 
Shepherding antipatterns
Shepherding antipatternsShepherding antipatterns
Shepherding antipatterns
 
Kata rules
Kata rulesKata rules
Kata rules
 
Movie app kata
Movie app kataMovie app kata
Movie app kata
 
Object discovery
Object discoveryObject discovery
Object discovery
 
Connascence
ConnascenceConnascence
Connascence
 
OCP bowling kata
OCP bowling kataOCP bowling kata
OCP bowling kata
 
OCP String Calculator kata
OCP String Calculator kataOCP String Calculator kata
OCP String Calculator kata
 
OCP kata overview
OCP kata overviewOCP kata overview
OCP kata overview
 
Telling not-asking
Telling not-askingTelling not-asking
Telling not-asking
 
Uml
UmlUml
Uml
 

OCP Checkout kata

  • 1. OCP Supemarket Checkout Kata Using the OCP rules, write a supermarket checkout controller, using the following test template: public class CheckoutTester { private int price(String... items) { Checkout checkout = new CheckoutFactory().create(); for (String item : items) checkout.scan(item); return checkout.total(); } @Test public void emptyBasket() { assertEquals(0, price("")); } }
  • 2. OCP Supemarket Checkout Kata An empty basket has a zero price: @Test public void emptyBasket() { assertEquals(0, price("")); } A single item has a constant price: @Test public void singleItem() { assertEquals(50, price("A")); assertEquals(30, price("B")); assertEquals(20, price("C")); assertEquals(15, price("D")); }
  • 3. Special offers 3 As get a 20p discount: AA → 100 AAA → 130 AAAA → 180 etc... 2 Bs get a 15p discount: BB → 45 ABABA → 175 ACABDB → 180 etc... A starter (A), a main (B) and either pudding (C,D) for 85: BDA → 85 AADC → 135 AABCA → 180 etc...
  • 4. OCP Supemarket Checkout Kata The original problem is here: http://codekata.pragprog.com/2007/01/kata_nine_back_.html