import org.junit.Test; import static org.junit.Assert.*; public class LifeTest { @Test public void createNewCell() { // Arrange: drei lebende Zellen Life l = new Life(); l.setAlive(0, 0); l.setAlive(0, 1); l.setAlive(0, 2); // Act: Berechnung der Folgegeneration ILife nextGen = l.nextGeneration(); // Assert: Rasterpunkt mit drei Nachbarn sollte jetzt leben assertTrue(nextGen.isAlive(1, 1)); } @Test public void destroyLonelyCell() { // Zellen, die weniger als zwei Nachbarn haben, müssen sterben (Einsamkeit). // Arrange: lebende Zelle (1,1) hat weniger als zwei Nachbarn und sollte sterben. Life l = new Life(); l.setAlive(1, 1); l.setAlive(0, 0); // Act: Berechnung der Folgegeneration ILife nextGen = l.nextGeneration(); // Assert: Zelle (1,1) sollte tot sein assertFalse(nextGen.isAlive(1, 1)); } @Test public void keepAliveCell() { // Zellen mit zwei oder drei Nachbarn bleiben am Leben. } @Test public void destroyCrowdedCell() { // Zellen mit mehr als drei Nachbarn sterben (Überbevölkerung). // Arrange: lebende Zelle (1,1) hat mehr als drei Nachbarn und sollte sterben. Life l = new Life(); l.setAlive(1, 1); l.setAlive(0, 0); l.setAlive(0, 1); l.setAlive(0, 2); l.setAlive(1, 0); // Act: Berechnung der Folgegeneration ILife nextGen = l.nextGeneration(); // Assert: Zelle (1,1) sollte tot sein assertFalse(nextGen.isAlive(1, 1)); // Test passed wieder sofort, obwohl ich noch keine weitere Überprüfung eingebaut habe, aus zuvor beschriebenem // Grund, dass Zellen in der nextGen grundsätzlich mit false initialisiert werden, solange man sie nicht // explizit mit setAlive() auf true setzt. } }