Thomas Papendieck
3 years ago
commit
9a8a7c79e8
5 changed files with 221 additions and 0 deletions
-
3.gitignore
-
5README.md
-
62pom.xml
-
84src/test/java/de/edu/hsfulda/ciil/cgol/GameCellTest.java
-
67src/test/java/de/edu/hsfulda/ciil/cgol/rulset/r23_3/CellStateDeadTest.java
@ -0,0 +1,3 @@ |
|||||
|
target/ |
||||
|
main/ |
||||
|
.* |
@ -0,0 +1,5 @@ |
|||||
|
# Übung Test Driven Development |
||||
|
|
||||
|
Dieser Code implementiert *"Conways Game of Life"* und dient als Beispiel für die Arbeitsmethode TDD. |
||||
|
Daher ist hier nur der Test-Code eingecheckt. |
||||
|
|
@ -0,0 +1,62 @@ |
|||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" |
||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
|
<modelVersion>4.0.0</modelVersion> |
||||
|
<groupId>de.edu.hsfulda.ciip.gameoflife</groupId> |
||||
|
<artifactId>GameOfLife</artifactId> |
||||
|
<version>0.1.0-SNAPSHOT</version> |
||||
|
<properties> |
||||
|
<maven.compiler.target>11</maven.compiler.target> |
||||
|
<maven.compiler.source>11</maven.compiler.source> |
||||
|
<junit.jupiter.version>5.8.1</junit.jupiter.version> |
||||
|
<junit.platform.version>1.8.1</junit.platform.version> |
||||
|
<mockito.version>4.1.0</mockito.version> |
||||
|
<assertj.version>3.21.0</assertj.version> |
||||
|
</properties> |
||||
|
<dependencies> |
||||
|
<dependency> |
||||
|
<groupId>org.junit.jupiter</groupId> |
||||
|
<artifactId>junit-jupiter-engine</artifactId> |
||||
|
<version>${junit.jupiter.version}</version> |
||||
|
<scope>test</scope> |
||||
|
</dependency> |
||||
|
<dependency> |
||||
|
<groupId>org.junit.jupiter</groupId> |
||||
|
<artifactId>junit-jupiter-params</artifactId> |
||||
|
<version>${junit.jupiter.version}</version> |
||||
|
<scope>test</scope> |
||||
|
</dependency> |
||||
|
|
||||
|
<!-- new assertThat() --> |
||||
|
<dependency> |
||||
|
<groupId>org.assertj</groupId> |
||||
|
<artifactId>assertj-core</artifactId> |
||||
|
<version>${assertj.version}</version> |
||||
|
<scope>test</scope> |
||||
|
</dependency> |
||||
|
<dependency> |
||||
|
<groupId>org.mockito</groupId> |
||||
|
<artifactId>mockito-core</artifactId> |
||||
|
<version>${mockito.version}</version> |
||||
|
<scope>test</scope> |
||||
|
</dependency> |
||||
|
<dependency> |
||||
|
<groupId>org.mockito</groupId> |
||||
|
<artifactId>mockito-junit-jupiter</artifactId> |
||||
|
<version>${mockito.version}</version> |
||||
|
<scope>test</scope> |
||||
|
</dependency> |
||||
|
</dependencies> |
||||
|
<build> |
||||
|
<pluginManagement> |
||||
|
<plugins> |
||||
|
<plugin> |
||||
|
<groupId>org.apache.maven.plugins</groupId> |
||||
|
<artifactId>maven-surefire-plugin</artifactId> |
||||
|
<!-- JUnit 5 requires Surefire version 2.22.0 or higher --> |
||||
|
<version>2.22.2</version> |
||||
|
</plugin> |
||||
|
</plugins> |
||||
|
</pluginManagement> |
||||
|
</build> |
||||
|
</project> |
@ -0,0 +1,84 @@ |
|||||
|
package de.edu.hsfulda.ciil.cgol; |
||||
|
|
||||
|
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
import static org.mockito.ArgumentMatchers.anyCollection; |
||||
|
import static org.mockito.Mockito.lenient; |
||||
|
import static org.mockito.Mockito.verify; |
||||
|
import static org.mockito.Mockito.when; |
||||
|
|
||||
|
import java.util.Arrays; |
||||
|
import java.util.Collection; |
||||
|
|
||||
|
import org.junit.jupiter.api.BeforeEach; |
||||
|
import org.junit.jupiter.api.Test; |
||||
|
import org.junit.jupiter.api.extension.ExtendWith; |
||||
|
import org.mockito.Mock; |
||||
|
import org.mockito.junit.jupiter.MockitoExtension; |
||||
|
|
||||
|
@ExtendWith(MockitoExtension.class) |
||||
|
class GameCellTest { |
||||
|
|
||||
|
@Mock(name = "initial state") |
||||
|
private CellState initialState; |
||||
|
@Mock(name = "neigbor state") |
||||
|
private CellState neighborState; |
||||
|
@Mock(name = "new state") |
||||
|
private CellState calculatedState; |
||||
|
|
||||
|
@Mock(name = "neighbor") |
||||
|
private GameCell neighborCell; |
||||
|
|
||||
|
private GameCell gameCell; |
||||
|
private final Collection<CellState> neighborStates = Arrays |
||||
|
.asList(neighborState, neighborState, neighborState, neighborState); |
||||
|
|
||||
|
@BeforeEach |
||||
|
void setUp() throws Exception { |
||||
|
lenient().when(neighborCell.getState()) |
||||
|
.thenReturn(neighborState); |
||||
|
gameCell = new GameCell(initialState); |
||||
|
for (int i =0;i<neighborStates.size();i++) { |
||||
|
gameCell.addNeigbor(neighborCell); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Test |
||||
|
void returnsInitialState() { |
||||
|
|
||||
|
CellState currentState = gameCell.getState(); |
||||
|
|
||||
|
assertThat(currentState).describedAs("initial state").isEqualTo(initialState); |
||||
|
} |
||||
|
|
||||
|
@Test |
||||
|
void passesStatesOfNeighborsWhenCalculatingFuture() { |
||||
|
|
||||
|
|
||||
|
gameCell.calculateFuture(); |
||||
|
|
||||
|
verify(initialState).calculateFuture(neighborStates); |
||||
|
|
||||
|
CellState currentState = gameCell.getState(); |
||||
|
assertThat(currentState) |
||||
|
.describedAs("state after calculation").isEqualTo(initialState); |
||||
|
} |
||||
|
|
||||
|
@Test |
||||
|
void changesStateWhenRequested() { |
||||
|
when(initialState.calculateFuture(anyCollection())) |
||||
|
.thenReturn(calculatedState); |
||||
|
|
||||
|
gameCell.calculateFuture(); |
||||
|
gameCell.updateState(); |
||||
|
|
||||
|
CellState currentState = gameCell.getState(); |
||||
|
assertThat(currentState) |
||||
|
.describedAs("state after changeRequest") |
||||
|
.isEqualTo(calculatedState); |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,67 @@ |
|||||
|
package de.edu.hsfulda.ciil.cgol.rulset.r23_3; |
||||
|
|
||||
|
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
|
||||
|
import java.util.Collections; |
||||
|
import java.util.List; |
||||
|
import java.util.Random; |
||||
|
import java.util.stream.Collectors; |
||||
|
import java.util.stream.IntStream; |
||||
|
import java.util.stream.Stream; |
||||
|
|
||||
|
import org.junit.jupiter.api.BeforeEach; |
||||
|
import org.junit.jupiter.params.ParameterizedTest; |
||||
|
import org.junit.jupiter.params.provider.Arguments; |
||||
|
import org.junit.jupiter.params.provider.MethodSource; |
||||
|
|
||||
|
import de.edu.hsfulda.ciil.cgol.CellState; |
||||
|
|
||||
|
class CellStateDeadTest { |
||||
|
|
||||
|
private static final int NEIGHBOR_COUNT = 5+new Random().nextInt(10); |
||||
|
|
||||
|
private static final CellState CELL_STATE_DEAD = new CellStateDead(); |
||||
|
|
||||
|
private static final CellState CELL_STATE_ALIVE = CellStateAlive.IS_ALIVE; |
||||
|
|
||||
|
@BeforeEach |
||||
|
void setUp() throws Exception { |
||||
|
} |
||||
|
|
||||
|
@ParameterizedTest(name = "[{index}] {0} -> {2}") |
||||
|
@MethodSource("testCasesForStateDead") |
||||
|
void test(String testName, List<CellState> neigborStates, CellState expectedResult) { |
||||
|
Collections.shuffle(neigborStates); |
||||
|
CellState calculatedState = CELL_STATE_DEAD.calculateFuture(neigborStates); |
||||
|
assertThat(calculatedState).describedAs(testName).isEqualTo(expectedResult); |
||||
|
} |
||||
|
|
||||
|
private static Stream<Arguments> testCasesForStateDead() { |
||||
|
return Stream.of( |
||||
|
Arguments.of( |
||||
|
"with zero alive neighbors", |
||||
|
IntStream.range(0, NEIGHBOR_COUNT) |
||||
|
.mapToObj(i -> CELL_STATE_DEAD) |
||||
|
.collect(Collectors.toList()), |
||||
|
CELL_STATE_DEAD), |
||||
|
Arguments.of( |
||||
|
"with 2 alive neighbors", |
||||
|
IntStream.range(0, NEIGHBOR_COUNT) |
||||
|
.mapToObj(i -> i < 2 ? CELL_STATE_ALIVE : CELL_STATE_DEAD) |
||||
|
.collect(Collectors.toList()), |
||||
|
CELL_STATE_DEAD), |
||||
|
Arguments.of( |
||||
|
"with 4 alive neighbors", |
||||
|
IntStream.range(0, NEIGHBOR_COUNT) |
||||
|
.mapToObj(i -> i < 4 ? CELL_STATE_ALIVE : CELL_STATE_DEAD) |
||||
|
.collect(Collectors.toList()), |
||||
|
CELL_STATE_DEAD), |
||||
|
Arguments.of( |
||||
|
"with 3 alive neighbors", |
||||
|
IntStream.range(0, NEIGHBOR_COUNT) |
||||
|
.mapToObj(i -> i < 3 ? CELL_STATE_ALIVE : CELL_STATE_DEAD) |
||||
|
.collect(Collectors.toList()), |
||||
|
CELL_STATE_ALIVE)); |
||||
|
} |
||||
|
|
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue