Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

modul:m122:learningunits:lu09:aufgaben:pytests [2024/12/10 07:07] – angelegt msutermodul:m122:learningunits:lu09:aufgaben:pytests [2024/12/17 08:04] (aktuell) msuter
Zeile 1: Zeile 1:
-====== LU09.A09Unittests auflisten ======+====== LU09.A06Bonus ======
 <WRAP center round todo 60%> <WRAP center round todo 60%>
-Erstelle ein JSON-Array mit allen Unittests in einem Python-Projekt.+Ergänze einen Dialog zur Auswahl des Projektordners.
 </WRAP> </WRAP>
  
-===== Aufgabe ===== 
-Das Skript durchsucht ein Projekt nach Dateien, die Unittests enthalten. 
-Die Dateinamen müssen ''test_'' oder ''_test'' enthalten. 
-Zum Beispiel: 
-  * **test_**main.py 
-  * main**_test**.py 
  
-Innerhalb dieser Dateien sucht das Skript nach Funktionen, deren Bezeichner mit ''test_'' beginnt. 
-Die Bezeichner dieser Funktionen werden in eine Liste geschrieben. 
-Schlussendlich wird diese Liste sortiert und als JSON-Array ausgegeben. 
- 
-==== Beispiel ==== 
-<code> 
-[ 
-    "test_figure_init_empty", 
-    "test_figure_add_shape", 
-    "test_figure_add_shape_multiple", 
-    "test_figure_take_shape", 
-    "test_figure_remove_shape_by_title", 
-    "test_figure_remove_shape_by_index", 
-    "test_figure_total_area_scale1", 
-    "test_figure_total_area_scale3", 
-    "test_figureshape_init_empty", 
-    "test_figureshape_set_figure", 
-    "test_figureshape_set_shape", 
-    "test_main" 
-] 
-</code> 
- 
-==== Wieso Python und Bash? ==== 
-Grundsätzlich könnte man die Aufgabe ausschliesslich mit Python lösen oder als reines Bash-Skript schreiben. 
-Jede Sprache hat jedoch ihre Vorteile, die wir hier ausnutzen wollen: 
-  * Dateien durchsuchen: Hier spielt Bash seine Stärke aus 
-  * Arbeiten mit Collections: Dies lässt sich leichter in Python umsetzen. 
- 
-===== Hinweise===== 
-<WRAP center round tip 60%> 
-Das Python-Skript kann nicht unter Windows ausgeführt werden, da wir Bash-Befehle nutzen. 
- 
-Um auf das Windows-Laufwerk ''C'' zuzugreifen, verwendest du im WSL den Pfad ''/mnt/c''. 
-</WRAP> 
- 
-==== Aufruf ==== 
-  - Öffne das Windows Subsystem for Linux (WSL). 
-  - Wechsel in den Ordner, in dem Ihr Projekt gespeichert ist. Zum Beispiel: ''cd "/mnt/c/BZZ/Python/m122-lu08-a02-listtest-ghwalin"'' 
-  - Starte das Python Skript mit ''python3 main.py ORDNER_PFAD''. Ersetze ''ORDNER_PFAD'' durch den Pfad zum gewünschten Projekt. 
- 
-===== Vorgehen ===== 
-Wie immer lohnt es sich, das Projekt schrittweise anzugehen. 
-Jede Funktion innerhalb des Programms kann einzeln realisiert und getestet werden. 
- 
-Da wir auf einer reinen Linux-Shell keinen Debugger haben, behelfen wir uns mit ''print()''-Befehlen um die Zwischenresultate anzuzeigen. 
- 
-==== 1. Argument prüfen / übernehmen ==== 
-In der Funktion ''main()'' prüfen wir das Argument "Pfad zum gewünschten Projekt". 
- 
-  * Falls kein Argument übergeben wurde, beendet das Programm mit einer Fehlermeldung 
-  * Wechsle in das angegebene Verzeichnis. Nutze dazu den Python-Befehl ''os.chdir()''. ((Man könnte auch den Bash-Befehl ''cd'' verwenden, dieser ändert das Verzeichnis aber nur temporär. Dann müssten wir bei jedem Bash-Befehl das Verzeichnis explizit angeben.)) 
-  * Falls das Verzeichnis nicht existiert, wird das Skript mit einer Fehlermeldung beendet. 
- 
-==== 2. execute_bash ==== 
-Die Funktion ''execute_bash'' soll die verschiedenen Bash-Befehle ausführen. 
-Falls ein Fehler auftritt, wird eine Meldung ausgegeben und das Skript beendet. 
- 
-  * Parameter: Bash-Kommando (String) 
-  * Return: Resultat-Objekt 
- 
-==== 3. find_test_modules ==== 
-Diese Funktion sucht mit Hilfe eines **Bash**-Befehls im aktuellen Ordner nach allen Dateien, die PyTests enthalten können. 
-Als Returnwert liefert die Funktion eine Liste aller Dateinamen. 
- 
-Diese Dateien können anhand ihres Dateinamens erkannt werden: 
-  * ''test_?????.py'' 
-  * ''?????_test.py'' 
- 
-<WRAP center round tip 60%> 
-  * Ermittle zunächst den Bash-Befehl, um die gewünschten Dateien in einem Ordner zu finden. 
-  * Teste den Befehl auf der Kommandozeile des WSL. 
-</WRAP> 
- 
-==== 4. find_test_functions ==== 
-Die Funktion durchsucht alle Dateien in einer Liste nach PyTest-Funktionen. 
-Es sollen alle Zeilen gefunden werden, die ''def test_'' enthalten. 
-\\Zum Beispiel: 
-    * def test_main(): 
-    * def test_something(capsys): 
-    * ... 
- 
-Die gefundenen Zeilen werden an ''sanitize_function_name'' übergeben. 
-Speichere die "gereinigten" Funktionsnamen in einer Liste 
-  * Argument: Eine Liste mit Dateinamen 
-  * Returnwert: Eine Liste mit allen PyTest-Funktionen.\\Zum Beispiel: 
-    * test_main 
-    * test_something 
- 
-==== 5. sanitize_function_name ==== 
-Die Namen der Testfunktionen soll in dieser Funktion "gereinigt" werden. 
-  * Argument: Eine Codezeile mit einer Test-Funktion, z.B. ''def test_something(capsys):  # Test some things'' 
-  * Returnwert: Der Name der Test-Funktion, z.B. ''test_something'' 
- 
-Es werden alle sonstigen Angaben in dieser Zeile entfernt: 
-  * Das Schlüsselwort ''def''. 
-  * Leerzeichen am Anfang und am Ende. 
-  * Die Liste mit den Parametern. 
-  * Der Doppelpunkt 
-  * Allfällige Zeilenkommentare 
- 
-==== 6. output_json ==== 
-Die Funktion erzeugt ein JSON-Array mit den Namen aller Testfunktionen. 
-Dieses JSON-Array wird in der Konsole ausgegeben. 
- 
-  * Argument: Liste mit Namen von Testfunktionen. 
-  * Returnwert: None 
- 
-===== Bonus-Auftrag ===== 
 In der Vorlage ist bereits eine Funktion ''select_project()'' vorhanden. In der Vorlage ist bereits eine Funktion ''select_project()'' vorhanden.
 Diese öffnet ein Fenster, in dem der Benutzer das gewünschte Projekt auswählen kann. Diese öffnet ein Fenster, in dem der Benutzer das gewünschte Projekt auswählen kann.
  • modul/m122/learningunits/lu09/aufgaben/pytests.1733810834.txt.gz
  • Zuletzt geändert: 2024/12/10 07:07
  • von msuter