Select Git revision
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
test_converter 3.72 KiB
# Bei Eingabe der Zahl 1 soll "I" ausgegeben werden
# Bei Eingabe der Zahl 4 soll "IV" ausgegeben werden
# Bei Eingabe der Zahl 21 soll "XXI" ausgegeben werden
# Bei Eingabe der Zahl 1000 soll "M" ausgegeben werden
# Bei Eingabe der Zahl 0 soll "Es gibt keine römische Null" ausgegeben werden
# Bei Eingabe eines Float-Werts (z.B. 4.3) soll "Bitte ganze Zahlen eingeben" ausgegeben werden
# Bei Eingabe eines negativen Werts (z.B. -5) soll "Es sind nur positive Zahlen zum konvertieren erlaubt" ausgegeben werden
# Bei Eingabe mehrerer Zahlen wie z.B. "4,3" soll "Bitte nur eine ganze Zahl eingeben" ausgegeben werden
import unittest
from abc import ABC, abstractmethod
from other.RafehDaniel.converter import Converter as Dani
# 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 = Dani()
# 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()