Aufgaben-Python/07_referenzen_und_speicher/test_aufgabe.py

106 lines
No EOL
3.4 KiB
Python

import unittest
import sys
from pathlib import Path
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 TestKapitel07(unittest.TestCase):
def setUp(self):
Person = getattr(aufgabe, "Person", None)
self.assertIsNotNone(Person, "Klasse 'Person' nicht gefunden!")
self.Person = Person
def test_01_init(self):
"""Prüft Initialisierung und Default-Werte für Referenzen."""
p = self.Person("Mia", 2008)
self.assertEqual(p.name, "Mia")
self.assertEqual(p.geburtsjahr, 2008)
self.assertIsNone(p.mutter)
self.assertIsNone(p.vater)
self.assertEqual(p.kinder, [])
def test_02_mutter_vater_setzen(self):
"""Prüft gegenseitige Referenzverknüpfung."""
kind = self.Person("Mia", 2008)
mama = self.Person("Susi", 1980)
papa = self.Person("Tom", 1978)
kind.mutter_setzen(mama)
kind.vater_setzen(papa)
# Referenzprüfung
self.assertIs(kind.mutter, mama)
self.assertIs(kind.vater, papa)
self.assertIn(kind, mama.kinder)
self.assertIn(kind, papa.kinder)
# Kein doppeltes Hinzufügen
kind.mutter_setzen(mama)
self.assertEqual(len(mama.kinder), 1)
def test_03_geschwister(self):
"""Prüft Finden aller Geschwister (ohne self und ohne Duplikate)."""
mama = self.Person("Susi", 1980)
papa = self.Person("Tom", 1978)
kind1 = self.Person("Mia", 2008)
kind2 = self.Person("Leo", 2011)
halbbruder = self.Person("Max", 2005)
kind1.mutter_setzen(mama)
kind1.vater_setzen(papa)
kind2.mutter_setzen(mama)
kind2.vater_setzen(papa)
halbbruder.vater_setzen(papa) # Nur gleicher Vater
geschwister_mia = kind1.geschwister()
self.assertNotIn(kind1, geschwister_mia, "self darf nicht in den eigenen Geschwistern sein!")
self.assertIn(kind2, geschwister_mia)
self.assertIn(halbbruder, geschwister_mia)
self.assertEqual(len(geschwister_mia), 2)
def test_04_grosseltern(self):
"""Prüft Ermittlung der Großeltern über Referenzketten."""
oma1 = self.Person("Anna", 1955)
opa1 = self.Person("Karl", 1952)
oma2 = self.Person("Monika", 1956)
mama = self.Person("Susi", 1980)
mama.mutter_setzen(oma1)
mama.vater_setzen(opa1)
papa = self.Person("Tom", 1978)
papa.mutter_setzen(oma2)
kind = self.Person("Mia", 2008)
kind.mutter_setzen(mama)
kind.vater_setzen(papa)
grosseltern = kind.grosseltern()
self.assertIn(oma1, grosseltern)
self.assertIn(opa1, grosseltern)
self.assertIn(oma2, grosseltern)
self.assertEqual(len(grosseltern), 3)
def test_05_str(self):
"""Prüft __str__ Formatierung."""
p = self.Person("Mia", 2008)
self.assertEqual(str(p), "Mia (*2008)")
if __name__ == "__main__":
res = unittest.main(verbosity=2, exit=False)
try:
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
from gamification import report_single_chapter_result
report_single_chapter_result(Path(__file__).parent.name, res.result.wasSuccessful(), res.result.testsRun)
except Exception:
pass
sys.exit(0 if res.result.wasSuccessful() else 1)