Exkurs - Modultest in Python
Schnittstellenbeschreibungen mit Testfällen
Die Funktionsdefinitionen im folgenden Quelltext enthalten Testfälle in Form von Zeichenketten (mit 3 Anführungszeichen), die Funktionsaufrufe und die erwarteten Ergebnisse beschreiben.
Python stellt eine Möglichkeit zur Verfügung, wie man solche Testfälle automatisiert überprüfen kann.
Hierzu muss man nur die Funktion testmod
des Moduls doctest
ausführen
(siehe Quelltext).
def verschluesseltesZeichen(zeichen, schluessel): # zeichen: Großbuchstabe # schluessel: Zuordnungstabelle in Form einer Zeichenkette # return: zum übergebenen Buchstaben zugeordneter Buchstabe # Beispiel: """ >>> verschluesseltesZeichen('B', 'GKXCSLZUAHWDBMTYENJVPOIRFQ') 'K' """ nummer = ord(zeichen)-ord('A') neuesZeichen = schluessel[nummer] return neuesZeichen def verschluesselterText(klartext, schluessel): # klartext: Zeichenkette aus Großbuchstaben # schluessel: Zuordnungstabelle in Form einer Zeichenkette # return: neue, mit der Zuordnungstabelle konstruierte Zeichenkette # Beispiel: """ >>> verschluesselterText('HUND', 'GKXCSLZUAHWDBMTYENJVPOIRFQ') 'UPMC' """ geheimtext = '' for zeichen in klartext: neuesZeichen = verschluesseltesZeichen(zeichen, schluessel) geheimtext = geheimtext + neuesZeichen return geheimtext if __name__ == '__main__': from doctest import testmod testmod(verbose=True)
Python erzeugt bei der Ausführung der Datei, in der die Funktionsdefinitionen gespeichert sind, ein Testprotokoll, dem man die Testergebnisse entnehmen kann. Im vorliegenden Fall erhält man das folgende Testprotokoll:
>>> Trying: verschluesselterText('HUND', 'GKXCSLZUAHWDBMTYENJVPOIRFQ') Expecting: 'UPMC' ok Trying: verschluesseltesZeichen('B', 'GKXCSLZUAHWDBMTYENJVPOIRFQ') Expecting: 'K' ok 2 items passed all tests: 1 tests in __main__.verschluesselterText 1 tests in __main__.verschluesseltesZeichen 2 tests in 2 items. 2 passed and 0 failed. Test passed.
Aufgabe 1
(a) Ergänze weitere Testfälle in den oben gezeigten Schnittstellenbeschreibungen. Führe anschließend die Modultests durch.
(b) Teste entsprechend die Funktionen zum Entschlüsseln von Texten.