Skip to content

Commit 2636b61

Browse files
committed
live coding at JUG Metropolregion Nürnberg
1 parent 571addb commit 2636b61

File tree

5 files changed

+107
-11
lines changed

5 files changed

+107
-11
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package de.oio.refactoring.badtelefon;
2+
3+
public class ConsoleOutputter {
4+
5+
public void writeToConsole(String message) {
6+
System.out.println(message);
7+
}
8+
9+
}

src/main/java/de/oio/refactoring/badtelefon/Kunde.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,20 @@
11
package de.oio.refactoring.badtelefon;
22

33
public class Kunde {
4+
private static final int MONDSCHEINZEIT_ENDE = 9;
45
double gebuehr = 0.0;
56
Tarif tarif;
7+
private ConsoleOutputter outputter = new ConsoleOutputter();
68

79
public Kunde(int tarifArt) {
810
this.tarif = new Tarif(tarifArt);
911
}
1012

1113
public void account(int minuten, int stunde, int minute) {
12-
String message1 = String.format("Berechne Gespräch mit %02d min um %02d:%02d mit Tarif %s", minuten, stunde, minute, tarif.tarif);
13-
System.out.println(message1);
14-
boolean mondschein = false;
14+
outputter.writeToConsole(String.format("Berechne Gespräch mit %02d min um %02d:%02d mit Tarif %s", minuten, stunde, minute, tarif.tarif));
1515
double preis = 0;
1616

17-
// Mondscheinzeit ?
18-
if (stunde < 9 || stunde > 18)
19-
mondschein = true;
17+
boolean mondschein = isMondschein(stunde);
2018

2119
// Gespraechspreis ermitteln
2220
switch (tarif.tarif) {
@@ -41,12 +39,18 @@ public void account(int minuten, int stunde, int minute) {
4139
break;
4240

4341
}
44-
String message2 = String.format("Preis für das Gespräch: %.2f", preis);
45-
System.out.println(message2);
42+
outputter.writeToConsole(String.format("Preis für das Gespräch: %.2f", preis));
4643

4744
gebuehr += preis;
48-
String message3 = String.format("Gesamtgebühr nach Gespräch um %02d:%02d (Mondscheinzeit: %s): %.2f", stunde, minute, mondschein, gebuehr);
49-
System.out.println(message3);
45+
outputter.writeToConsole(String.format("Gesamtgebühr nach Gespräch um %02d:%02d (Mondscheinzeit: %s): %.2f", stunde, minute, mondschein, gebuehr));
46+
}
47+
48+
static boolean isMondschein(int stunde) {
49+
return stunde < MONDSCHEINZEIT_ENDE || isBeforeMondscheinzeitBeginn(stunde);
50+
}
51+
52+
static boolean isBeforeMondscheinzeitBeginn(int stunde) {
53+
return stunde > 18;
5054
}
5155

5256
public double getGebuehr() {

src/main/java/de/oio/refactoring/badtelefon/TarifeRunner.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@
55

66
public class TarifeRunner {
77
public static void main(String args[]) {
8-
Random random = new Random();
8+
new TarifeRunner().run();
9+
}
10+
11+
void run() {
12+
Random random = getRandom();
913

1014
for(Integer tarif : Arrays.asList(Tarif.PRIVAT, Tarif.BUSINESS, Tarif.PROFI)) {
1115
System.out.println(String.format("\nVerarbeitung von Tarif %s", tarif));
@@ -18,4 +22,8 @@ public static void main(String args[]) {
1822
System.out.println("Abrechnung: " + k.getGebuehr());
1923
}
2024
}
25+
26+
protected Random getRandom() {
27+
return new Random();
28+
}
2129
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package de.oio.refactoring.badtelefon;
2+
3+
import static org.junit.Assert.*;
4+
import org.junit.Test;
5+
6+
public class MondscheinTests {
7+
@Test
8+
public void testMondschein() {
9+
assertEquals(true, Kunde.isMondschein(0));
10+
assertEquals(true, Kunde.isMondschein(8));
11+
12+
assertEquals(false, Kunde.isMondschein(9));
13+
assertEquals(false, Kunde.isMondschein(12));
14+
assertEquals(false, Kunde.isMondschein(17));
15+
assertEquals(false, Kunde.isMondschein(18));
16+
17+
assertEquals(true, Kunde.isMondschein(19));
18+
assertEquals(true, Kunde.isMondschein(23));
19+
assertEquals(true, Kunde.isMondschein(24));
20+
assertEquals(true, Kunde.isMondschein(30));
21+
assertEquals(true, Kunde.isMondschein(-1));
22+
}
23+
24+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package de.oio.refactoring.badtelefon;
2+
3+
import java.io.ByteArrayOutputStream;
4+
import java.io.PrintStream;
5+
import java.util.Random;
6+
7+
import org.approvaltests.Approvals;
8+
import org.junit.After;
9+
import org.junit.Assert;
10+
import org.junit.Before;
11+
import org.junit.Test;
12+
13+
public class TarifeRunnerTest {
14+
private PrintStream originalSysOut;
15+
private ByteArrayOutputStream consoleStream;
16+
17+
@Before
18+
public void init() {
19+
originalSysOut = System.out;
20+
consoleStream = new ByteArrayOutputStream();
21+
PrintStream printStream = new PrintStream(consoleStream);
22+
System.setOut(printStream);
23+
}
24+
25+
@Test
26+
public void testSimpleOutput() {
27+
System.out.println("Hallo Publikum!");
28+
System.out.print("Hallo Falk!");
29+
Assert.assertEquals("Hallo Publikum!\r\nHallo Falk!", consoleStream.toString());
30+
}
31+
32+
private class TarifeRunnerForTest extends TarifeRunner {
33+
@Override
34+
protected Random getRandom() {
35+
return new Random(42);
36+
}
37+
}
38+
39+
@Test
40+
public void testRunnerWithApprovals() throws Exception {
41+
new TarifeRunnerForTest().run();
42+
Approvals.verify(consoleStream.toString());
43+
}
44+
45+
46+
@After
47+
public void teardown() {
48+
System.setOut(originalSysOut);
49+
}
50+
51+
}

0 commit comments

Comments
 (0)