From 91c5950bfacc3f93e43004feb1bb8cf62087e740 Mon Sep 17 00:00:00 2001 From: Marvin Serchimo <marvin.serchimo@student.reutlingen-university.de> Date: Tue, 1 Apr 2025 22:21:43 +0200 Subject: [PATCH] coverter --- test_converter | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 test_converter diff --git a/test_converter b/test_converter new file mode 100644 index 0000000..a16ff01 --- /dev/null +++ b/test_converter @@ -0,0 +1,86 @@ +import unittest +from abc import ABC, abstractmethod + +# Interface (abstrakte Basisklasse) +class IConverter(ABC): + @abstractmethod + def convert(self, input): + pass + +# Konkrete Implementierung des Interfaces +class RomanConverter(IConverter): + def convert(self, input): + # Bei Eingabe mehrerer Zahlen wie "4,3" + if isinstance(input, str) and "," in input: + return "Bitte nur eine ganze Zahl eingeben" + + # Typprüfung und Fehlerbehandlung + try: + if isinstance(input, float): + return "Bitte ganze Zahlen eingeben" + if isinstance(input, str): + if not input.isdigit(): + return "Bitte ganze Zahlen eingeben" + input = int(input) + number = int(input) + except (ValueError, TypeError): + return "Bitte ganze Zahlen eingeben" + + if number == 0: + return "Es gibt keine römische Null" + if number < 0: + return "Es sind nur positive Zahlen zum konvertieren erlaubt" + + roman_numerals = [ + (1000, 'M'), (900, 'CM'), (500, 'D'), (400, 'CD'), + (100, 'C'), (90, 'XC'), (50, 'L'), (40, 'XL'), + (10, 'X'), (9, 'IX'), (5, 'V'), (4, 'IV'), (1, 'I') + ] + + result = "" + for value, symbol in roman_numerals: + while number >= value: + result += symbol + number -= value + return result + +# Testklasse mit 8 funktionierenden Tests +class TestRomanConverter(unittest.TestCase): + def setUp(self): + self.converter = RomanConverter() + + # Bei Eingabe der Zahl 1 soll "I" ausgegeben werden + def test_1(self): + self.assertEqual(self.converter.convert(1), "I") + + # Bei Eingabe der Zahl 4 soll "IV" ausgegeben werden + def test_4(self): + self.assertEqual(self.converter.convert(4), "IV") + + # Bei Eingabe der Zahl 21 soll "XXI" ausgegeben werden + def test_21(self): + self.assertEqual(self.converter.convert(21), "XXI") + + # Bei Eingabe der Zahl 1000 soll "M" ausgegeben werden + def test_1000(self): + self.assertEqual(self.converter.convert(1000), "M") + + # Bei Eingabe der Zahl 0 soll "Es gibt keine römische Null" ausgegeben werden + def test_0(self): + self.assertEqual(self.converter.convert(0), "Es gibt keine römische Null") + + # Bei Eingabe eines Floats (4.3) soll "Bitte ganze Zahlen eingeben" ausgegeben werden + def test_float(self): + self.assertEqual(self.converter.convert(4.3), "Bitte ganze Zahlen eingeben") + + # Bei Eingabe eines negativen Werts (-5) soll "Es sind nur positive Zahlen zum konvertieren erlaubt" ausgegeben werden + def test_negative(self): + self.assertEqual(self.converter.convert(-5), "Es sind nur positive Zahlen zum konvertieren erlaubt") + + # Bei Eingabe von mehreren Werten wie "4,3" soll "Bitte nur eine ganze Zahl eingeben" ausgegeben werden + def test_multiple_values(self): + self.assertEqual(self.converter.convert("4,3"), "Bitte nur eine ganze Zahl eingeben") + +# Testausführung +if __name__ == '__main__': + unittest.main() -- GitLab