chnaged test framework

This commit is contained in:
2026-06-15 21:35:55 +02:00
parent a6d7138af2
commit 5c5d36afa9

View File

@@ -1,28 +1,15 @@
import org.junit.jupiter.api.DisplayName; import org.junit.Test;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import java.util.List; import java.util.List;
import java.util.Set;
import static org.junit.jupiter.api.Assertions.assertAll; import static org.junit.Assert.assertEquals;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.Assert.assertFalse;
import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
@DisplayName("Generische Arena") public class ArenaTest {
class ArenaTest {
@Nested
@DisplayName("Spieler-Arena")
class PlayerArenaTests {
@Test @Test
@DisplayName( public void attackAllAttacksEveryPlayer() {
"Ein Angriff wird auf alle Spieler angewendet"
)
void attackAllAttacksEveryPlayer() {
// Arrange // Arrange
Arena<Player> arena = new Arena<>(); Arena<Player> arena = new Arena<>();
@@ -43,29 +30,27 @@ class ArenaTest {
arena.attackAll(new SwordAttack()); arena.attackAll(new SwordAttack());
// Assert // Assert
assertAll( assertEquals(
() -> assertEquals(
70, 70,
warrior.getHitPoints() warrior.getHitPoints()
), );
() -> assertEquals(
assertEquals(
40, 40,
mage.getHitPoints() mage.getHitPoints()
), );
() -> assertFalse(
assertFalse(
warrior.isDefeated() warrior.isDefeated()
), );
() -> assertFalse(
assertFalse(
mage.isDefeated() mage.isDefeated()
)
); );
} }
@Test @Test
@DisplayName( public void samePlayerIsNotAddedTwice() {
"Dasselbe Objekt wird im Set nicht doppelt gespeichert"
)
void samePlayerIsNotAddedTwice() {
// Arrange // Arrange
Arena<Player> arena = new Arena<>(); Arena<Player> arena = new Arena<>();
@@ -84,17 +69,9 @@ class ArenaTest {
arena.size() arena.size()
); );
} }
}
@Nested
@DisplayName("Gegner-Arena")
class EnemyArenaTests {
@Test @Test
@DisplayName( public void fireSpellAffectsEnemyTypesDifferently() {
"Double Dispatch wirkt für jeden Gegnertyp unterschiedlich"
)
void fireSpellAffectsEnemyTypesDifferently() {
// Arrange // Arrange
Arena<Enemy> arena = new Arena<>(); Arena<Enemy> arena = new Arena<>();
@@ -115,23 +92,19 @@ class ArenaTest {
arena.attackAll(new FireSpell()); arena.attackAll(new FireSpell());
// Assert // Assert
assertAll( assertEquals(
() -> assertEquals(
75, 75,
skeleton.getHitPoints() skeleton.getHitPoints()
), );
() -> assertEquals(
assertEquals(
40, 40,
iceGolem.getHitPoints() iceGolem.getHitPoints()
)
); );
} }
@Test @Test
@DisplayName( public void swordAttackAffectsEnemyTypesDifferently() {
"Ein Schwert wirkt ebenfalls abhängig vom Gegnertyp"
)
void swordAttackAffectsEnemyTypesDifferently() {
// Arrange // Arrange
Arena<Enemy> arena = new Arena<>(); Arena<Enemy> arena = new Arena<>();
@@ -152,28 +125,19 @@ class ArenaTest {
arena.attackAll(new SwordAttack()); arena.attackAll(new SwordAttack());
// Assert // Assert
assertAll( assertEquals(
() -> assertEquals(
60, 60,
skeleton.getHitPoints() skeleton.getHitPoints()
), );
() -> assertEquals(
assertEquals(
85, 85,
iceGolem.getHitPoints() iceGolem.getHitPoints()
)
); );
} }
}
@Nested
@DisplayName("Gemischte Arena")
class MixedArenaTests {
@Test @Test
@DisplayName( public void mixedArenaAttacksAllCharacterTypes() {
"Spieler und Gegner können gemeinsam angegriffen werden"
)
void mixedArenaAttacksAllCharacterTypes() {
// Arrange // Arrange
Arena<Character> arena = new Arena<>(); Arena<Character> arena = new Arena<>();
@@ -200,27 +164,24 @@ class ArenaTest {
arena.attackAll(new FireSpell()); arena.attackAll(new FireSpell());
// Assert // Assert
assertAll( assertEquals(
() -> assertEquals(
70, 70,
player.getHitPoints() player.getHitPoints()
), );
() -> assertEquals(
assertEquals(
75, 75,
skeleton.getHitPoints() skeleton.getHitPoints()
), );
() -> assertEquals(
assertEquals(
40, 40,
iceGolem.getHitPoints() iceGolem.getHitPoints()
)
); );
} }
@Test @Test
@DisplayName( public void livingAndDefeatedCharactersAreSeparated() {
"Lebende und besiegte Figuren werden getrennt"
)
void livingAndDefeatedCharactersAreSeparated() {
// Arrange // Arrange
Arena<Character> arena = new Arena<>(); Arena<Character> arena = new Arena<>();
@@ -253,32 +214,31 @@ class ArenaTest {
arena.getDefeatedCharacters(); arena.getDefeatedCharacters();
// Assert // Assert
assertAll( assertEquals(
() -> assertEquals(
1, 1,
living.size() living.size()
), );
() -> assertTrue(
assertTrue(
living.contains(iceGolem) living.contains(iceGolem)
), );
() -> assertEquals(
assertEquals(
2, 2,
defeated.size() defeated.size()
), );
() -> assertTrue(
assertTrue(
defeated.contains(player) defeated.contains(player)
), );
() -> assertTrue(
assertTrue(
defeated.contains(skeleton) defeated.contains(skeleton)
)
); );
} }
@Test @Test
@DisplayName( public void defeatedCharactersCanBeRemoved() {
"Besiegte Figuren können entfernt werden"
)
void defeatedCharactersCanBeRemoved() {
// Arrange // Arrange
Arena<Character> arena = new Arena<>(); Arena<Character> arena = new Arena<>();
@@ -304,32 +264,24 @@ class ArenaTest {
} }
// Assert // Assert
assertAll( assertEquals(
() -> assertEquals(
1, 1,
arena.size() arena.size()
), );
() -> assertTrue(
assertTrue(
arena.getCharacters() arena.getCharacters()
.contains(iceGolem) .contains(iceGolem)
), );
() -> assertFalse(
assertFalse(
arena.getCharacters() arena.getCharacters()
.contains(player) .contains(player)
)
); );
} }
}
@Nested
@DisplayName("Verwaltung der Arena")
class ArenaManagementTests {
@Test @Test
@DisplayName( public void removeDeletesCharacter() {
"remove entfernt eine vorhandene Figur"
)
void removeDeletesCharacter() {
// Arrange // Arrange
Arena<Player> arena = new Arena<>(); Arena<Player> arena = new Arena<>();
@@ -345,23 +297,17 @@ class ArenaTest {
arena.remove(player); arena.remove(player);
// Assert // Assert
assertAll( assertTrue(removed);
() -> assertTrue(removed), assertTrue(arena.isEmpty());
() -> assertTrue(
arena.isEmpty() assertEquals(
),
() -> assertEquals(
0, 0,
arena.size() arena.size()
)
); );
} }
@Test @Test
@DisplayName( public void removingUnknownCharacterReturnsFalse() {
"remove liefert false für eine unbekannte Figur"
)
void removingUnknownCharacterReturnsFalse() {
// Arrange // Arrange
Arena<Player> arena = new Arena<>(); Arena<Player> arena = new Arena<>();
@@ -382,21 +328,16 @@ class ArenaTest {
arena.remove(unknownPlayer); arena.remove(unknownPlayer);
// Assert // Assert
assertAll( assertFalse(removed);
() -> assertFalse(removed),
() -> assertEquals( assertEquals(
1, 1,
arena.size() arena.size()
)
); );
} }
@Test @Test(expected = UnsupportedOperationException.class)
@DisplayName( public void returnedCharacterSetIsUnmodifiable() {
"getCharacters liefert ein unveränderliches Set"
)
void returnedCharacterSetIsUnmodifiable() {
// Arrange
Arena<Player> arena = new Arena<>(); Arena<Player> arena = new Arena<>();
arena.add( arena.add(
@@ -406,40 +347,20 @@ class ArenaTest {
) )
); );
Set<Player> characters = arena.getCharacters().clear();
arena.getCharacters();
// Act und Assert
assertThrows(
UnsupportedOperationException.class,
characters::clear
);
} }
@Test @Test(expected = NullPointerException.class)
@DisplayName( public void nullCharacterCannotBeAdded() {
"null kann nicht hinzugefügt werden"
)
void nullCharacterCannotBeAdded() {
Arena<Character> arena = new Arena<>(); Arena<Character> arena = new Arena<>();
assertThrows( arena.add(null);
NullPointerException.class,
() -> arena.add(null)
);
} }
@Test @Test(expected = NullPointerException.class)
@DisplayName( public void nullAttackIsRejected() {
"attackAll akzeptiert keinen null-Angriff"
)
void nullAttackIsRejected() {
Arena<Character> arena = new Arena<>(); Arena<Character> arena = new Arena<>();
assertThrows( arena.attackAll(null);
NullPointerException.class,
() -> arena.attackAll(null)
);
}
} }
} }