====== LU09.A00: PyTests finden ====== Erstelle ein JSON-Array mit allen Unittests in einem Python-Projekt. ===== 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 ==== [ "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" ] ==== 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. ===== Umsetzung ===== ==== Vorbereitung ==== //Siehe [[https://wiki.bzz.ch/modul/m122/learningunits/lu08/linux_python#virtual_environment]] - Klone das Repository im WSL in einen neuen Ordner. - Erstelle das virtual Environment. - Führe das Bash-Skript ''setup.sh'' aus. Dieses erstellt einen Ordner und Dateien für die Tests. ==== Teilschritte ==== In den folgenden Aufgaben werden Sie zunächst einzelne Teilschritte umsetzen und testen. Zum Schluss schreiben Sie die ''main''-Funktion um alle Teilfunktionen zu verbinden. ===== Hinweise===== 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''. ==== Aufruf des Skripts ==== - Ö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. ==== Unittests aufrufen ==== Um einen bestimmten Unittest durchzuführen, wird dieser im Terminal mit dem Befehl ''pytest'' aufgerufen. pytest MODULE::FUNCTION * Ersetze MODULE durch den Dateinamen mit den Unittests, z.B. ''main_test.py'' * Ersetze FUNCTION durch den Namen der Test-Funktion, z.B. ''test_find_test_modules'' * Gibst du nur den Modulnamen an, werden alle Tests in dieser Datei durchgeführt. pytest main_test.py::test_find_test_modules pytest main_test.py