Kategorie „vielleicht testen" in sn_basis abschließend bewerten (Folge zu #63/#65) #67

Closed
opened 2026-09-18 09:50:29 +00:00 by Daniel · 0 comments
Member

Ziel

Die 32 verbleibenden, als „vielleicht testen" eingestuften sn_basis-Funktionen (außerhalb des zur
Überarbeitung zurückgestellten Print-Bereichs) werden einzeln entschieden: entweder mit einem
Mock-Modus-Test versehen, wo das sinnvoll möglich ist, oder mit einer kurzen Begründung im Docstring als
bewusst nicht getestet markiert. Am Ende ist die Kategorie „vielleicht" für sn_basis aufgelöst — jede
Funktion steht dann in „getestet" oder „vernachlässigbar/zurückgestellt", keine offene Frage mehr.

Betroffen

Plugin: sn_basis
Module/Dateien:

  • functions/os_wrapper.py
  • functions/qgiscore_wrapper.py
  • functions/qgisui_wrapper.py
  • modules/DataGrabber.py
  • modules/pruef_ergebnis.py
  • ui/navigation.py
  • ui/tabs/settings_tab.py
  • ui/tabs/print_tab.py

Berührt Schnittstellen (docs/architektur/schnittstellen.md)? nein

Fachlicher Hintergrund

Aus der fachlichen Analyse zu #63 (Chat vom 18.09.2026) stammt die Kategorie „vielleicht testen": Funktionen
mit etwas Logik, die aber entweder eng an echtes Qt-Widget-/Signal-Verhalten gekoppelt sind (nur mit echtem
QGIS oder aufwendig gebauten Fake-Widgets sinnvoll prüfbar) oder eine so geringe Änderungshäufigkeit bzw.
so geringen Schaden bei stillem Bruch haben, dass ein Test fraglich ist. Von den ursprünglich 57
„vielleicht"-Funktionen sind 25 bereits mit „Test ausgesetzt, zunächst Refactor" markiert (print_logic.py,
print_layout.py, print_layout_baufreigabe.py — eigenes Thema, siehe „Nicht Teil dieses Issues"). Die
restlichen 32, mit dem Grund für die Einstufung als „vielleicht":

  • functions/os_wrapper.py: is_case_sensitive_fs — echte Verzweigung, aber aktuell nur unter Windows im
    Einsatz
  • functions/qgiscore_wrapper.py: create_buffer_layer — im Mock-Modus nur der Guard erreichbar, die
    eigentliche Pufferlogik bräuchte echtes QGIS
  • functions/qgisui_wrapper.py: find_dock_widgets, add_menu, remove_menu — dünne iface-Hüllen mit
    einem Guard
  • modules/DataGrabber.py: _aggregate_results — vermutlich schon indirekt über die bestehenden
    run()-Tests mitgeprüft, aber nie gezielt
  • modules/pruef_ergebnis.py: dateipfad — einfacher Typ-Check-Getter
  • ui/navigation.py: add_action, finalize_menu_and_toolbar, set_active_plugin, remove_action,
    remove_all — echte Zustandslogik (Priorität, Exklusivität der Aktionen), aber eng an echte
    QAction/QMenu-Objekte gekoppelt
  • ui/tabs/settings_tab.py: _build_input — Widget-Aufbau mit einer Verzweigung (Landkreis-Dropdown vs.
    Textfeld)
  • ui/tabs/print_tab.py (19 Funktionen): set_services, _build_ui, _restore_state,
    _restore_atlas_layer_selection, _populate_atlas_layer_combo, _get_gespeicherte_themen,
    _connect_project_signals, _disconnect_project_signals, _connect_theme_collection_signals,
    _disconnect_theme_collection_signals, _refresh_thema_combo_live, _get_current_canvas_scale,
    _on_druckpuffer_clicked, _on_auswahl_as_atlas_clicked, _on_atlas_layer_changed, _toggle_atlas,
    _on_atlas_erzeugen_changed, _on_vorlage_erstellen, cleanup — Qt-Widget- und Signal-lastig, das dürfte
    der schwierigste Block sein

Muster für Tests, die sich lohnen: tests/test_dockmanager.py, tests/test_verfahrensgebiet_manager.py
(Signal-Handler mit Fake-Objekten statt echtem Qt), tests/test_settings_tab.py
(Klasse.__new__(Klasse) statt echtem __init__, siehe docs/wissen/fallstricke.md). Muster für einen
begründeten Verzicht: die 43 bereits mit „von Test abgesehen, weil vernachlässigbar; HD 18.09.2026"
markierten sn_basis-Funktionen (#65).

Abnahmekriterien

  • Für jede der 32 genannten Funktionen liegt eine von zwei Entscheidungen vor:
    (a) ein Mock-Modus-Test mit deutschem Docstring nach dem Muster """Prüft, dass …""" (ADR 0009), oder
    (b) ein kurzer Docstring-Vermerk, warum kein Test sinnvoll ist (Muster: „von Test abgesehen, weil
    …; Kürzel Datum")
  • Keine der 32 Funktionen bleibt ohne Test und ohne Vermerk
  • python scripts/testkatalog.py neu erzeugt und mitcommittet
  • Mock-Test vorhanden, run_tests.py sn_basis --baseline ohne NEU ROT
  • QGIS-Test: nicht nötig für Entscheidung (b); bei Entscheidung (a) im PR vermerken, falls eine Funktion
    trotzdem einen manuellen QGIS-Test nahelegt

Nicht Teil dieses Issues

  • modules/print_logic.py, modules/print_layout.py, modules/print_layout_baufreigabe.py — bereits mit
    „Test ausgesetzt, zunächst Refactor" markiert, wird erst nach der geplanten Grundüberarbeitung des
    Print-Bereichs angegangen.
  • Die Kategorie „testen" ist mit #63/#65 abgeschlossen (bis auf den separat zu klärenden Fund
    Datenschreiber._store_style_in_gpkg, das war „testen"-Kategorie und ist versehentlich in #63 nicht
    getestet worden — eigenes kleines Ticket, nicht Teil dieses Issues).
  • Der vermutete Bug hartkodierter Fachplugin-Pfade (LayerLoader.apply_style,
    functions/ly_style_wrapper.py::apply_style, Datenschreiber._resolve_style_path) — eigenes Bug-Issue.
  • Pruefmanager._ask_use_or_replace_pufferlayer — bereits als Bug in #60 erfasst (toter Code).
## Ziel Die 32 verbleibenden, als „vielleicht testen" eingestuften sn_basis-Funktionen (außerhalb des zur Überarbeitung zurückgestellten Print-Bereichs) werden einzeln entschieden: entweder mit einem Mock-Modus-Test versehen, wo das sinnvoll möglich ist, oder mit einer kurzen Begründung im Docstring als bewusst nicht getestet markiert. Am Ende ist die Kategorie „vielleicht" für sn_basis aufgelöst — jede Funktion steht dann in „getestet" oder „vernachlässigbar/zurückgestellt", keine offene Frage mehr. ## Betroffen Plugin: sn_basis Module/Dateien: - `functions/os_wrapper.py` - `functions/qgiscore_wrapper.py` - `functions/qgisui_wrapper.py` - `modules/DataGrabber.py` - `modules/pruef_ergebnis.py` - `ui/navigation.py` - `ui/tabs/settings_tab.py` - `ui/tabs/print_tab.py` Berührt Schnittstellen (`docs/architektur/schnittstellen.md`)? nein ## Fachlicher Hintergrund Aus der fachlichen Analyse zu #63 (Chat vom 18.09.2026) stammt die Kategorie „vielleicht testen": Funktionen mit etwas Logik, die aber entweder eng an echtes Qt-Widget-/Signal-Verhalten gekoppelt sind (nur mit echtem QGIS oder aufwendig gebauten Fake-Widgets sinnvoll prüfbar) oder eine so geringe Änderungshäufigkeit bzw. so geringen Schaden bei stillem Bruch haben, dass ein Test fraglich ist. Von den ursprünglich 57 „vielleicht"-Funktionen sind 25 bereits mit „Test ausgesetzt, zunächst Refactor" markiert (`print_logic.py`, `print_layout.py`, `print_layout_baufreigabe.py` — eigenes Thema, siehe „Nicht Teil dieses Issues"). Die restlichen 32, mit dem Grund für die Einstufung als „vielleicht": - `functions/os_wrapper.py`: `is_case_sensitive_fs` — echte Verzweigung, aber aktuell nur unter Windows im Einsatz - `functions/qgiscore_wrapper.py`: `create_buffer_layer` — im Mock-Modus nur der Guard erreichbar, die eigentliche Pufferlogik bräuchte echtes QGIS - `functions/qgisui_wrapper.py`: `find_dock_widgets`, `add_menu`, `remove_menu` — dünne `iface`-Hüllen mit einem Guard - `modules/DataGrabber.py`: `_aggregate_results` — vermutlich schon indirekt über die bestehenden `run()`-Tests mitgeprüft, aber nie gezielt - `modules/pruef_ergebnis.py`: `dateipfad` — einfacher Typ-Check-Getter - `ui/navigation.py`: `add_action`, `finalize_menu_and_toolbar`, `set_active_plugin`, `remove_action`, `remove_all` — echte Zustandslogik (Priorität, Exklusivität der Aktionen), aber eng an echte `QAction`/`QMenu`-Objekte gekoppelt - `ui/tabs/settings_tab.py`: `_build_input` — Widget-Aufbau mit einer Verzweigung (Landkreis-Dropdown vs. Textfeld) - `ui/tabs/print_tab.py` (19 Funktionen): `set_services`, `_build_ui`, `_restore_state`, `_restore_atlas_layer_selection`, `_populate_atlas_layer_combo`, `_get_gespeicherte_themen`, `_connect_project_signals`, `_disconnect_project_signals`, `_connect_theme_collection_signals`, `_disconnect_theme_collection_signals`, `_refresh_thema_combo_live`, `_get_current_canvas_scale`, `_on_druckpuffer_clicked`, `_on_auswahl_as_atlas_clicked`, `_on_atlas_layer_changed`, `_toggle_atlas`, `_on_atlas_erzeugen_changed`, `_on_vorlage_erstellen`, `cleanup` — Qt-Widget- und Signal-lastig, das dürfte der schwierigste Block sein Muster für Tests, die sich lohnen: `tests/test_dockmanager.py`, `tests/test_verfahrensgebiet_manager.py` (Signal-Handler mit Fake-Objekten statt echtem Qt), `tests/test_settings_tab.py` (`Klasse.__new__(Klasse)` statt echtem `__init__`, siehe `docs/wissen/fallstricke.md`). Muster für einen begründeten Verzicht: die 43 bereits mit „von Test abgesehen, weil vernachlässigbar; HD 18.09.2026" markierten sn_basis-Funktionen (#65). ## Abnahmekriterien - [ ] Für jede der 32 genannten Funktionen liegt eine von zwei Entscheidungen vor: (a) ein Mock-Modus-Test mit deutschem Docstring nach dem Muster `"""Prüft, dass …"""` (ADR 0009), oder (b) ein kurzer Docstring-Vermerk, warum kein Test sinnvoll ist (Muster: „von Test abgesehen, weil …; Kürzel Datum") - [ ] Keine der 32 Funktionen bleibt ohne Test und ohne Vermerk - [ ] `python scripts/testkatalog.py` neu erzeugt und mitcommittet - [ ] Mock-Test vorhanden, `run_tests.py sn_basis --baseline` ohne NEU ROT - [ ] QGIS-Test: nicht nötig für Entscheidung (b); bei Entscheidung (a) im PR vermerken, falls eine Funktion trotzdem einen manuellen QGIS-Test nahelegt ## Nicht Teil dieses Issues - `modules/print_logic.py`, `modules/print_layout.py`, `modules/print_layout_baufreigabe.py` — bereits mit „Test ausgesetzt, zunächst Refactor" markiert, wird erst nach der geplanten Grundüberarbeitung des Print-Bereichs angegangen. - Die Kategorie „testen" ist mit #63/#65 abgeschlossen (bis auf den separat zu klärenden Fund `Datenschreiber._store_style_in_gpkg`, das war „testen"-Kategorie und ist versehentlich in #63 nicht getestet worden — eigenes kleines Ticket, nicht Teil dieses Issues). - Der vermutete Bug hartkodierter Fachplugin-Pfade (`LayerLoader.apply_style`, `functions/ly_style_wrapper.py::apply_style`, `Datenschreiber._resolve_style_path`) — eigenes Bug-Issue. - `Pruefmanager._ask_use_or_replace_pufferlayer` — bereits als Bug in #60 erfasst (toter Code).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: AG_QGIS/Plugin_SN_Basis#67