Zum Hauptinhalt springen

Mini-Projekt: Testbare Bibliothek

Anforderungen

  • mind. 2 Funktionen (z. B. clamp, schnitt)
  • Type Hints
  • logging bei ungewöhnlichen Fällen
  • unittest mit normal + Fehler/Grenze
  • unittest.main()

Beispiellösung

Lösung anzeigen
import logging
import unittest

logging.basicConfig(level=logging.INFO)

def clamp(wert: int, lo: int, hi: int) -> int:
if lo > hi:
raise ValueError("lo > hi")
return max(lo, min(hi, wert))

def schnitt(werte: list[float]) -> float:
if not werte:
logging.warning("schnitt: leere Liste")
raise ValueError("leere Liste")
return sum(werte) / len(werte)

class TestLib(unittest.TestCase):
def test_clamp(self):
self.assertEqual(clamp(5, 0, 10), 5)
self.assertEqual(clamp(-1, 0, 10), 0)

def test_schnitt(self):
self.assertEqual(schnitt([2, 4]), 3.0)

def test_schnitt_leer(self):
with self.assertRaises(ValueError):
schnitt([])

if __name__ == "__main__":
unittest.main()

Kapitel 41 geschafft!

Als Nächstes: CLI-Anwendungen mit argparse.