Skip to content

Commit 0e0e88d

Browse files
committed
Modernize (upgrade to Java 21, JUnit Jupiter and AssertJ)
1 parent 8173099 commit 0e0e88d

File tree

4 files changed

+76
-59
lines changed

4 files changed

+76
-59
lines changed

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ Damit kann die Implementierung der Design Patterns in Java ganz praktisch geübt
3131
Ganz einfach:
3232
* Für jedes Design Pattern gibt es ein entsprechendes Package mit vorgefertigten Klassengerüsten, sowie einen JUnit-Test.
3333
* Die TODOs in den Gerüst-Klassen werden durch Implementierung des jeweiligen Design Patterns so erledigt,
34-
dass alle JUnit-Tests erfolgreich durchlaufen. Die Testklassen selbst sollen dabei **_nicht_** geändert werden.
34+
dass alle JUnit-Tests erfolgreich durchlaufen.
35+
* Die Unit-Tests müssen durch entfernen der `@Disabled`-Annotationen in den Testklassen aktiviert werden. Die Testklassen selbst sollen dabei **_nicht_** geändert werden.
3536

3637
## Voraussetzungen ##
3738

@@ -40,8 +41,8 @@ Die Katas werden als Maven-Projekt zur Verfügung gestellt, das mit der "Maven-P
4041

4142
| Software | Version |
4243
|-------------|-----------------------------------|
43-
| Java | Version 8 (1.8) oder höher |
44-
| Maven | 3.x |
44+
| Java | Version 21 (oder höher) |
45+
| Maven | 3.9.x (oder höher) |
4546
| Git | (von GitHub unterstützte Version) |
4647

4748
## Die Katas ##

pom.xml

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,27 +11,33 @@
1111
<name>design-pattern-katas</name>
1212

1313
<properties>
14-
<maven.compiler.source>1.8</maven.compiler.source>
15-
<maven.compiler.target>1.8</maven.compiler.target>
14+
<maven.compiler.source>21</maven.compiler.source>
15+
<maven.compiler.target>21</maven.compiler.target>
1616
</properties>
1717

1818
<!-- Test dependencies -->
1919

2020
<dependencies>
2121
<dependency>
22-
<groupId>junit</groupId>
23-
<artifactId>junit</artifactId>
24-
<version>4.13.1</version>
22+
<groupId>org.junit.jupiter</groupId>
23+
<artifactId>junit-jupiter</artifactId>
24+
<version>5.11.0</version>
2525
<scope>test</scope>
2626
</dependency>
2727

2828
<dependency>
2929
<groupId>commons-io</groupId>
3030
<artifactId>commons-io</artifactId>
31-
<version>2.14.0</version>
31+
<version>2.16.1</version>
3232
<scope>test</scope>
3333
</dependency>
3434

35+
<dependency>
36+
<groupId>org.assertj</groupId>
37+
<artifactId>assertj-core</artifactId>
38+
<version>3.26.3</version>
39+
</dependency>
40+
3541
</dependencies>
3642

3743
</project>

src/test/java/de/doubleslash/kata/designpattern/factory/LoggerFactoryTest.java

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,47 @@
11
package de.doubleslash.kata.designpattern.factory;
22

33
import org.apache.commons.io.output.TeeOutputStream;
4-
import org.junit.After;
5-
import org.junit.Before;
6-
import org.junit.Test;
4+
import org.junit.jupiter.api.AfterEach;
5+
import org.junit.jupiter.api.BeforeEach;
6+
import org.junit.jupiter.api.Disabled;
7+
import org.junit.jupiter.api.Test;
78

89
import java.io.ByteArrayOutputStream;
910
import java.io.PrintStream;
1011
import java.nio.charset.StandardCharsets;
1112

12-
import static org.hamcrest.CoreMatchers.*;
13-
import static org.junit.Assert.assertThat;
13+
import static org.assertj.core.api.Assertions.assertThat;
14+
1415

1516
/**
16-
* TODO: Das Factory Method Pattern ausimplementieren, so dass alle Tests erfolgreich durchlaufen.
17-
* An dieser Testklasse sollen keine Änderungen durchgeführt werden!
17+
* TODO:
18+
* <ul>
19+
* <li>Die {@link Disabled}-Annotation über der Klassendeklaration entfernen</li>
20+
* <li>Das Factory Method Pattern ausimplementieren, so dass alle Tests erfolgreich durchlaufen.</li>
21+
* </ul>
22+
*
23+
* Außer dem Entfernen der Annotation sollen in dieser Klasse keine Änderungen durchgeführt werden!
1824
*/
25+
@Disabled
1926
public class LoggerFactoryTest {
2027

2128
private static final String LOG_MESSAGE = "Das ist eine Test-Lognachricht";
22-
private static final String EMPTY_STRING = "";
2329

2430
private ByteArrayOutputStream baos;
2531

2632
private PrintStream originalSystemOut;
2733

28-
@Before
29-
public void setUp() throws Exception {
34+
@BeforeEach
35+
public void setUp() {
3036
// Ausgaben nach System.out in einen ByteArrayOutputStream kopieren, damit die Ausgaben später ausgewertet
3137
// werden können
3238
baos = new ByteArrayOutputStream();
3339
originalSystemOut = System.out;
3440
System.setOut(new PrintStream(new TeeOutputStream(originalSystemOut, baos)));
3541
}
3642

37-
@After
38-
public void tearDown() throws Exception {
43+
@AfterEach
44+
public void tearDown() {
3945
System.setOut(originalSystemOut);
4046
}
4147

@@ -44,7 +50,7 @@ public void tearDown() throws Exception {
4450
* Logger-Interface implementiert.
4551
*/
4652
@Test
47-
public void testWhenCreatingFileLoggerItIsNotNull() throws Exception {
53+
public void testWhenCreatingFileLoggerItIsNotNull() {
4854

4955
// Vorbereiten
5056
LoggerFactory factory = new LoggerFactory(new LoggerConfiguration("file"));
@@ -53,15 +59,15 @@ public void testWhenCreatingFileLoggerItIsNotNull() throws Exception {
5359
Logger logger = factory.getLogger();
5460

5561
// Auswerten
56-
assertThat(logger, is(notNullValue()));
62+
assertThat(logger).isNotNull();
5763
}
5864

5965
/**
6066
* Damit dieser Test erfolgreich ist, muss die LoggerFactory ein Objekt zurückliefern, das das Logger-Interface
6167
* implementiert und den Klassennamen FileLogger hat.
6268
*/
6369
@Test
64-
public void testWhenCreatingFileLoggerItsClassNameIsFileLogger() throws Exception {
70+
public void testWhenCreatingFileLoggerItsClassNameIsFileLogger() {
6571

6672
// Vorbereiten
6773
LoggerFactory factory = new LoggerFactory(new LoggerConfiguration("file"));
@@ -70,7 +76,7 @@ public void testWhenCreatingFileLoggerItsClassNameIsFileLogger() throws Exceptio
7076
Logger logger = factory.getLogger();
7177

7278
// Auswerten
73-
assertThat(classNameOf(logger), is(equalTo("FileLogger")));
79+
assertThat(classNameOf(logger)).isEqualTo("FileLogger");
7480
}
7581

7682
/**
@@ -79,7 +85,7 @@ public void testWhenCreatingFileLoggerItsClassNameIsFileLogger() throws Exceptio
7985
* nach System.out schreibt.
8086
*/
8187
@Test
82-
public void testWhenLoggingToFileLoggerTheCorrectMessageIsLogged() throws Exception {
88+
public void testWhenLoggingToFileLoggerTheCorrectMessageIsLogged() {
8389

8490
// Vorbereiten
8591
LoggerFactory factory = new LoggerFactory(new LoggerConfiguration("file"));
@@ -99,7 +105,7 @@ public void testWhenLoggingToFileLoggerTheCorrectMessageIsLogged() throws Except
99105
* Logger-Interface implementiert.
100106
*/
101107
@Test
102-
public void testWhenCreatingDbLoggerItIsNotNull() throws Exception {
108+
public void testWhenCreatingDbLoggerItIsNotNull() {
103109

104110
// Vorbereiten
105111
LoggerFactory factory = new LoggerFactory(new LoggerConfiguration("db"));
@@ -108,15 +114,15 @@ public void testWhenCreatingDbLoggerItIsNotNull() throws Exception {
108114
Logger logger = factory.getLogger();
109115

110116
// Auswerten
111-
assertThat(logger, is(notNullValue()));
117+
assertThat(logger).isNotNull();
112118
}
113119

114120
/**
115121
* Damit dieser Test erfolgreich ist, muss die LoggerFactory ein Objekt zurückliefern, das das Logger-Interface
116122
* implementiert und den Klassennamen DbLogger hat.
117123
*/
118124
@Test
119-
public void testWhenCreatingDbLoggerItsClassNameIsDbLogger() throws Exception {
125+
public void testWhenCreatingDbLoggerItsClassNameIsDbLogger() {
120126

121127
// Vorbereiten
122128
LoggerFactory factory = new LoggerFactory(new LoggerConfiguration("db"));
@@ -125,7 +131,7 @@ public void testWhenCreatingDbLoggerItsClassNameIsDbLogger() throws Exception {
125131
Logger logger = factory.getLogger();
126132

127133
// Auswerten
128-
assertThat(classNameOf(logger), is(equalTo("DbLogger")));
134+
assertThat(classNameOf(logger)).isEqualTo("DbLogger");
129135
}
130136

131137
/**
@@ -134,7 +140,7 @@ public void testWhenCreatingDbLoggerItsClassNameIsDbLogger() throws Exception {
134140
* nach System.out schreibt.
135141
*/
136142
@Test
137-
public void testWhenLoggingToDbLoggerTheCorrectMessageIsLogged() throws Exception {
143+
public void testWhenLoggingToDbLoggerTheCorrectMessageIsLogged() {
138144

139145
// Vorbereiten
140146
LoggerFactory factory = new LoggerFactory(new LoggerConfiguration("db"));
@@ -154,7 +160,7 @@ public void testWhenLoggingToDbLoggerTheCorrectMessageIsLogged() throws Exceptio
154160
* Logger-Interface implementiert.
155161
*/
156162
@Test
157-
public void testWhenCreatingSilentLoggerItIsNotNull() throws Exception {
163+
public void testWhenCreatingSilentLoggerItIsNotNull() {
158164

159165
// Vorbereiten
160166
LoggerFactory factory = new LoggerFactory(new LoggerConfiguration("silent"));
@@ -163,15 +169,15 @@ public void testWhenCreatingSilentLoggerItIsNotNull() throws Exception {
163169
Logger logger = factory.getLogger();
164170

165171
// Auswerten
166-
assertThat(logger, is(notNullValue()));
172+
assertThat(logger).isNotNull();
167173
}
168174

169175
/**
170176
* Damit dieser Test erfolgreich ist, muss die LoggerFactory ein Objekt zurückliefern, das das Logger-Interface
171177
* implementiert und den Klassennamen SilentLogger hat.
172178
*/
173179
@Test
174-
public void testWhenCreatingSilentLoggerItsClassNameIsSilentLogger() throws Exception {
180+
public void testWhenCreatingSilentLoggerItsClassNameIsSilentLogger() {
175181

176182
// Vorbereiten
177183
LoggerFactory factory = new LoggerFactory(new LoggerConfiguration("silent"));
@@ -180,15 +186,15 @@ public void testWhenCreatingSilentLoggerItsClassNameIsSilentLogger() throws Exce
180186
Logger logger = factory.getLogger();
181187

182188
// Auswerten
183-
assertThat(classNameOf(logger), is(equalTo("SilentLogger")));
189+
assertThat(classNameOf(logger)).isEqualTo("SilentLogger");
184190
}
185191

186192
/**
187193
* Damit dieser Test erfolgreich ist, muss die LoggerFactory ein Objekt zurückliefern, das das Logger-Interface
188194
* implementiert, und dessen log(message)-Methode nichts loggt (d.h. nichts nach System.out schreibt).
189195
*/
190196
@Test
191-
public void testWhenLoggingToSilentLoggerNothingIsLogged() throws Exception {
197+
public void testWhenLoggingToSilentLoggerNothingIsLogged() {
192198

193199
// Vorbereiten
194200
LoggerFactory factory = new LoggerFactory(new LoggerConfiguration("silent"));
@@ -201,18 +207,18 @@ public void testWhenLoggingToSilentLoggerNothingIsLogged() throws Exception {
201207
assertThatNothingWasLogged();
202208
}
203209

204-
private void assertThatMessageWasLogged(String expectedLogMessage) throws Exception {
210+
private void assertThatMessageWasLogged(String expectedLogMessage) {
205211
expectedLogMessage = expectedLogMessage.trim();
206212
String loggedMessage = loggedMessage().trim();
207-
assertThat(loggedMessage, is(equalTo(expectedLogMessage)));
213+
assertThat(loggedMessage).isEqualTo(expectedLogMessage);
208214
}
209215

210-
private void assertThatNothingWasLogged() throws Exception {
211-
assertThat(loggedMessage(), is(equalTo(EMPTY_STRING)));
216+
private void assertThatNothingWasLogged() {
217+
assertThat(loggedMessage()).isEmpty();
212218
}
213219

214-
private String loggedMessage() throws Exception {
215-
return baos.toString(StandardCharsets.UTF_8.name());
220+
private String loggedMessage() {
221+
return baos.toString(StandardCharsets.UTF_8);
216222
}
217223

218224
private String classNameOf(Logger logger) {

src/test/java/de/doubleslash/kata/designpattern/state/DishwasherTest.java

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
package de.doubleslash.kata.designpattern.state;
22

3-
import static org.hamcrest.CoreMatchers.containsString;
4-
import static org.hamcrest.CoreMatchers.equalTo;
5-
import static org.hamcrest.CoreMatchers.is;
6-
import static org.hamcrest.MatcherAssert.assertThat;
3+
import org.junit.jupiter.api.BeforeEach;
4+
import org.junit.jupiter.api.Disabled;
5+
import org.junit.jupiter.api.Test;
76

8-
import org.junit.Before;
9-
import org.junit.Test;
7+
import static org.assertj.core.api.Assertions.assertThat;
108

119
/**
12-
* TODO: Das State Pattern ausimplementieren, so dass alle Tests erfolgreich durchlaufen.
13-
* An dieser Testklasse sollen keine Änderungen durchgeführt werden!
10+
* TODO:
11+
* <ul>
12+
* <li>Die {@link Disabled}-Annotation über der Klassendeklaration entfernen</li>
13+
* <li>Das State Pattern ausimplementieren, so dass alle Tests erfolgreich durchlaufen.</li>
14+
* </ul>
15+
*
16+
* Außer dem Entfernen der Annotation sollen in dieser Klasse keine Änderungen durchgeführt werden!
1417
*/
18+
@Disabled
1519
public class DishwasherTest {
1620

1721
private static final String OFF = "off";
@@ -21,18 +25,18 @@ public class DishwasherTest {
2125

2226
private Dishwasher dishwasher;
2327

24-
@Before
25-
public void setUp() throws Exception {
28+
@BeforeEach
29+
public void setUp() {
2630
this.dishwasher = new Dishwasher();
2731
}
2832

2933
@Test
30-
public void testStateOfNewDishwasherIsOff() throws Exception {
34+
public void testStateOfNewDishwasherIsOff() {
3135
assertDishwasherIs(OFF);
3236
}
3337

3438
@Test
35-
public void testStateTransitionsFromStateOff() throws Exception {
39+
public void testStateTransitionsFromStateOff() {
3640
assertDishwasherIs(OFF);
3741

3842
// keine Zustandsänderung
@@ -47,7 +51,7 @@ public void testStateTransitionsFromStateOff() throws Exception {
4751
}
4852

4953
@Test
50-
public void testStateTransitionsFromStateOn() throws Exception {
54+
public void testStateTransitionsFromStateOn() {
5155
ensureDishwasherIsOn();
5256

5357
// keine Zustandsänderung
@@ -65,7 +69,7 @@ public void testStateTransitionsFromStateOn() throws Exception {
6569
}
6670

6771
@Test
68-
public void testStateTransitionsFromStateWashing() throws Exception {
72+
public void testStateTransitionsFromStateWashing() {
6973
ensureDishwasherIsWashing();
7074

7175
// keine Zustandsänderung
@@ -86,7 +90,7 @@ public void testStateTransitionsFromStateWashing() throws Exception {
8690
}
8791

8892
@Test
89-
public void testStateTransitionsFromStatePaused() throws Exception {
93+
public void testStateTransitionsFromStatePaused() {
9094
ensureDishwasherIsPaused();
9195

9296
// keine Zustandsänderung
@@ -135,8 +139,8 @@ private void assertDishwasherState(String expectedState) {
135139

136140
private void assertDishwasherIs(String expectedStateName) {
137141
DishwasherState state = dishwasher.getState();
138-
assertThat(state.getStateName(), is(equalTo(expectedStateName)));
139-
assertThat(state.getClass().getSimpleName().toLowerCase(), containsString(expectedStateName));
142+
assertThat(state.getStateName()).isEqualTo(expectedStateName);
143+
assertThat(state.getClass().getSimpleName().toLowerCase()).contains(expectedStateName);
140144
}
141145

142146
}

0 commit comments

Comments
 (0)