Aufgaben-Python/01_einstieg_klassen/test_aufgabe.py

84 lines
3.7 KiB
Python

import unittest
import sys
from pathlib import Path
# Sicherstellen, dass das aktuelle Verzeichnis im Modulpfad ist
sys.path.insert(0, str(Path(__file__).parent))
try:
import aufgabe
except ImportError as e:
raise ImportError(f"Konnte 'aufgabe.py' nicht importieren: {e}")
class TestKapitel01(unittest.TestCase):
def test_01_klasse_existiert(self):
"""Prüft, ob die Klasse Haustier definiert wurde."""
self.assertTrue(
hasattr(aufgabe, "Haustier"),
"Fehler: Die Klasse 'Haustier' existiert noch nicht. Nutze: class Haustier:"
)
self.assertTrue(
isinstance(aufgabe.Haustier, type),
"Fehler: 'Haustier' sollte eine Klasse sein!"
)
def test_02_erstelle_bello(self):
"""Prüft, ob erstelle_bello() ein korrektes Haustier-Objekt liefert."""
self.assertTrue(hasattr(aufgabe, "erstelle_bello"), "Fehler: Funktion 'erstelle_bello' fehlt!")
bello = aufgabe.erstelle_bello()
self.assertIsNotNone(bello, "Fehler: 'erstelle_bello()' gibt None zurück. Vergiss nicht das 'return'!")
self.assertIsInstance(bello, aufgabe.Haustier, "Fehler: 'bello' muss eine Instanz der Klasse 'Haustier' sein!")
self.assertEqual(getattr(bello, "name", None), "Bello", "Fehler: 'bello.name' muss 'Bello' sein!")
self.assertEqual(getattr(bello, "tierart", None), "Hund", "Fehler: 'bello.tierart' muss 'Hund' sein!")
self.assertEqual(getattr(bello, "alter", None), 3, "Fehler: 'bello.alter' muss 3 sein!")
def test_03_erstelle_mimi(self):
"""Prüft, ob erstelle_mimi() ein korrektes Haustier-Objekt liefert."""
self.assertTrue(hasattr(aufgabe, "erstelle_mimi"), "Fehler: Funktion 'erstelle_mimi' fehlt!")
mimi = aufgabe.erstelle_mimi()
self.assertIsNotNone(mimi, "Fehler: 'erstelle_mimi()' gibt None zurück. Vergiss nicht das 'return'!")
self.assertIsInstance(mimi, aufgabe.Haustier, "Fehler: 'mimi' muss eine Instanz der Klasse 'Haustier' sein!")
self.assertEqual(getattr(mimi, "name", None), "Mimi", "Fehler: 'mimi.name' muss 'Mimi' sein!")
self.assertEqual(getattr(mimi, "tierart", None), "Katze", "Fehler: 'mimi.tierart' muss 'Katze' sein!")
self.assertEqual(getattr(mimi, "alter", None), 5, "Fehler: 'mimi.alter' muss 5 sein!")
def test_04_steckbrief_text(self):
"""Prüft, ob steckbrief_text() den richtigen String formatiert."""
self.assertTrue(hasattr(aufgabe, "steckbrief_text"), "Fehler: Funktion 'steckbrief_text' fehlt!")
tier = aufgabe.Haustier()
tier.name = "Rocky"
tier.tierart = "Papagei"
tier.alter = 2
ergebnis = aufgabe.steckbrief_text(tier)
erwartet = "Rocky ist ein(e) Papagei und ist 2 Jahre alt."
self.assertEqual(
ergebnis,
erwartet,
f"Fehler: Textausgabe weicht ab!\nErwartet: '{erwartet}'\nErhalten: '{ergebnis}'"
)
def test_05_aelteres_tier(self):
"""Prüft die Altersvergleich-Funktion."""
self.assertTrue(hasattr(aufgabe, "aelteres_tier"), "Fehler: Funktion 'aelteres_tier' fehlt!")
t1 = aufgabe.Haustier()
t1.name = "Tier A"
t1.alter = 4
t2 = aufgabe.Haustier()
t2.name = "Tier B"
t2.alter = 7
t3 = aufgabe.Haustier()
t3.name = "Tier C"
t3.alter = 4
self.assertIs(aufgabe.aelteres_tier(t1, t2), t2, "Fehler: Tier B (7) ist älter als Tier A (4)!")
self.assertIs(aufgabe.aelteres_tier(t2, t1), t2, "Fehler: Tier B (7) ist älter als Tier A (4)!")
self.assertIs(aufgabe.aelteres_tier(t1, t3), t1, "Fehler: Bei gleichem Alter soll tier1 zurückgegeben werden!")
if __name__ == "__main__":
unittest.main(verbosity=2)