106 lines
No EOL
3.4 KiB
Python
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) |