From 8563a95ded63d8fde05dd0e0243ea1c10be42ecf Mon Sep 17 00:00:00 2001 From: Daniel Date: Mon, 26 Oct 2026 20:13:17 +0100 Subject: [PATCH] =?UTF-8?q?Test-Audit=20sn=5Fbasis=20fortgesetzt:=20qgisui?= =?UTF-8?q?=5Fwrapper.py=20fachlich=20gepr=C3=BCft=20(#76)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 13 Testfälle nach Freigabe als geprüft markiert: test_qgisui_wrapper_helpers.py komplett (12 bestehende, davon 1 geschärft, und 1 neuer für remove_menu ohne menuAction). Nebenbefund (Datenschreiber wertet den Rückgabewert von add_layer_to_project nicht aus, Docstring der Funktion widersprüchlich) als Issue-Entwurf vorbereitet. Testkatalog neu erzeugt. Co-Authored-By: Claude Opus 5.5 --- docs/status/testpruefungen.json | 52 +++++++++++++++++++++++++++++++++ docs/tests/testkatalog.html | 26 +++++++++-------- docs/tests/testkatalog.md | 43 ++++++++++++++------------- 3 files changed, 88 insertions(+), 33 deletions(-) diff --git a/docs/status/testpruefungen.json b/docs/status/testpruefungen.json index 49d2ff5..eff3a32 100644 --- a/docs/status/testpruefungen.json +++ b/docs/status/testpruefungen.json @@ -939,6 +939,58 @@ "datum": "2026-10-26", "hash": "31469cdffcd8" }, + "sn_basis.tests.test_qgisui_wrapper_helpers.AddLayerToProjectTests.test_mit_qgis_fehler_liefert_false": { + "datum": "2026-10-26", + "hash": "55aecee5ebca" + }, + "sn_basis.tests.test_qgisui_wrapper_helpers.AddLayerToProjectTests.test_mit_qgis_fuegt_layer_dem_projekt_hinzu": { + "datum": "2026-10-26", + "hash": "9ce36a9cc9bf" + }, + "sn_basis.tests.test_qgisui_wrapper_helpers.AddLayerToProjectTests.test_mock_modus_liefert_true_ohne_projektzugriff": { + "datum": "2026-10-26", + "hash": "78e47a3cb3fd" + }, + "sn_basis.tests.test_qgisui_wrapper_helpers.AddLayerToProjectTests.test_none_layer_liefert_false": { + "datum": "2026-10-26", + "hash": "693286e3baed" + }, + "sn_basis.tests.test_qgisui_wrapper_helpers.AddRemoveMenuTests.test_add_menu_mit_echtem_qt_menu_fuegt_es_der_menubar_hinzu": { + "datum": "2026-10-26", + "hash": "bcd536417956" + }, + "sn_basis.tests.test_qgisui_wrapper_helpers.AddRemoveMenuTests.test_add_menu_ohne_main_window_tut_nichts": { + "datum": "2026-10-26", + "hash": "3b88d5079949" + }, + "sn_basis.tests.test_qgisui_wrapper_helpers.AddRemoveMenuTests.test_add_menu_ohne_menuaction_wird_ignoriert": { + "datum": "2026-10-26", + "hash": "d36b4a5d68b2" + }, + "sn_basis.tests.test_qgisui_wrapper_helpers.AddRemoveMenuTests.test_remove_menu_entfernt_ueber_menuaction": { + "datum": "2026-10-26", + "hash": "63e933a68605" + }, + "sn_basis.tests.test_qgisui_wrapper_helpers.AddRemoveMenuTests.test_remove_menu_ohne_main_window_tut_nichts": { + "datum": "2026-10-26", + "hash": "45a66a6428d1" + }, + "sn_basis.tests.test_qgisui_wrapper_helpers.AddRemoveMenuTests.test_remove_menu_ohne_menuaction_wird_ignoriert": { + "datum": "2026-10-26", + "hash": "63226989dbbd" + }, + "sn_basis.tests.test_qgisui_wrapper_helpers.FindDockWidgetsTests.test_fehler_beim_suchen_liefert_leere_liste": { + "datum": "2026-10-26", + "hash": "ef90c33c07dc" + }, + "sn_basis.tests.test_qgisui_wrapper_helpers.FindDockWidgetsTests.test_liefert_dock_widgets_des_main_window": { + "datum": "2026-10-26", + "hash": "cc4fdc88ea7c" + }, + "sn_basis.tests.test_qgisui_wrapper_helpers.FindDockWidgetsTests.test_ohne_main_window_liefert_leere_liste": { + "datum": "2026-10-26", + "hash": "0065353ce6d8" + }, "sn_basis.tests.test_settings_logic.TestSettingsLogic.test_load": { "datum": "2026-09-17", "hash": "f14c558bc597" diff --git a/docs/tests/testkatalog.html b/docs/tests/testkatalog.html index cbfa61a..e69370d 100644 --- a/docs/tests/testkatalog.html +++ b/docs/tests/testkatalog.html @@ -123,24 +123,24 @@

Prüfstand

Testkatalog der sn_*-Plugins — was die Suite heute prüft, auf einen Blick.
-
Quelle: docs/tests/testkatalog.md
Baseline: docs/status/testbaseline.json (SHA-256 aeabc946a7f3)
Prüf-Audit: docs/status/testpruefungen.json (SHA-256 b2525df27b91)
+
Quelle: docs/tests/testkatalog.md
Baseline: docs/status/testbaseline.json (SHA-256 aeabc946a7f3)
Prüf-Audit: docs/status/testpruefungen.json (SHA-256 7df562788eb6)
-
689Testfälle
-
646grün
+
690Testfälle
+
647grün
35rot (Baseline)
79%mit Docstring
-
35%aktuell geprüft
+
37%aktuell geprüft
55Testdateien
34%ohne Testbezug
Verteilung je Paket
-
sn_basis32 Dateien · 356 Testfälle
+
sn_basis32 Dateien · 357 Testfälle
sn_verfahrensgebiet18 Dateien · 289 Testfälle
sn_plan415 Dateien · 44 Testfälle
@@ -159,11 +159,11 @@

sn_basis

Plattform-Plugin · Ordner Plugin_SN_Basis

- -
32Testdateien
356Testfälle
356grün
0rot (Baseline)
100%mit Docstring
69%geprüft
70ohne Testbezug
+
32Testdateien
357Testfälle
357grün
0rot (Baseline)
100%mit Docstring
72%geprüft
70ohne Testbezug

Tests für sn_basis/ui/base_dockwidget.py::closeEvent (Issue #65).

CloseEventTests 5
flowchart TD
   root(["test_base_dockwidget.py"])
   class root rootnode
@@ -1049,7 +1049,7 @@
   classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
   classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
   classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
-  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
PolygonZuLinieTests
test_none_liefert_none
Prüft, dass polygon_zu_linie für None-Eingabe None liefert.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_leere_geometrie_liefert_none
Prüft, dass eine leere Geometrie None liefert.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_stufe1_nutzt_boundary_wenn_vorhanden
Prüft, dass eine Geometrie mit boundary() (QGIS 3.x-Pfad) deren Ergebnis direkt liefert.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_stufe2_extrahiert_ringe_bei_einfachem_polygon
Prüft, dass ohne boundary() die Ringe eines einfachen Polygons manuell extrahiert werden.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_stufe2_extrahiert_alle_ringe_bei_multipolygon
Prüft, dass bei einem MultiPolygon die Ringe aller Teilpolygone extrahiert werden.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_stufe1_leerer_umring_faellt_auf_stufe2_zurueck
Prüft, dass ein leeres Ergebnis von boundary() auf die manuelle Ringextraktion zurückfällt.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_stufe1_fehler_faellt_auf_stufe2_zurueck
Prüft, dass ein Fehler in boundary() auf die manuelle Ringextraktion zurückfällt.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_stufe3_fallback_wenn_keine_ringe_extrahierbar
Prüft, dass bei fehlgeschlagener Ringextraktion auf convertToType(1, True) zurückgefallen wird.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_alle_stufen_scheitern_liefert_none
Prüft, dass polygon_zu_linie None liefert, wenn Ringextraktion und convertToType beide scheitern.grüngeprüft am 2026-10-26
LayerExistsInGpkgTests
test_fehlende_datei_liefert_false
Prüft, dass eine nicht vorhandene GPKG-Datei False liefert.grüngeprüft am 2026-10-26
LayerExistsInGpkgTests
test_leerer_pfad_oder_layername_liefert_false
Prüft, dass ein leerer Pfad oder Layername False liefert.grüngeprüft am 2026-10-26
LayerExistsInGpkgTests
test_vorhandener_layer_liefert_true
Prüft, dass ein in gpkg_contents eingetragener Layername als vorhanden erkannt wird.grüngeprüft am 2026-10-26
LayerExistsInGpkgTests
test_fehlender_layer_liefert_false
Prüft, dass ein nicht in gpkg_contents eingetragener Layername als nicht vorhanden gilt.grüngeprüft am 2026-10-26
CreateBufferLayerTests
test_ohne_qgis_liefert_none
Prüft, dass create_buffer_layer ohne verfügbares QGIS None liefert.grüngeprüft am 2026-10-26
CreateBufferLayerTests
test_fehlender_source_layer_liefert_none
Prüft, dass ein fehlender Quelllayer (None) None liefert, auch wenn QGIS verfügbar wäre.grüngeprüft am 2026-10-26
CreateBufferLayerTests
test_source_layer_ohne_getfeatures_liefert_none
Prüft, dass ein Quelllayer ohne getFeatures()-Methode None liefert.grüngeprüft am 2026-10-26
CreateBufferLayerTests
test_source_layer_ohne_features_liefert_none
Prüft, dass ein Quelllayer ohne Features None liefert, statt einen leeren Pufferlayer anzulegen.grüngeprüft am 2026-10-26

Tests für sn_basis/functions/qgisui_wrapper.py::add_layer_to_project/find_dock_widgets/add_menu/remove_menu (Issue #65/#67).

AddLayerToProjectTests 4FindDockWidgetsTests 3AddRemoveMenuTests 5
flowchart TD
+  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
PolygonZuLinieTests
test_none_liefert_none
Prüft, dass polygon_zu_linie für None-Eingabe None liefert.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_leere_geometrie_liefert_none
Prüft, dass eine leere Geometrie None liefert.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_stufe1_nutzt_boundary_wenn_vorhanden
Prüft, dass eine Geometrie mit boundary() (QGIS 3.x-Pfad) deren Ergebnis direkt liefert.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_stufe2_extrahiert_ringe_bei_einfachem_polygon
Prüft, dass ohne boundary() die Ringe eines einfachen Polygons manuell extrahiert werden.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_stufe2_extrahiert_alle_ringe_bei_multipolygon
Prüft, dass bei einem MultiPolygon die Ringe aller Teilpolygone extrahiert werden.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_stufe1_leerer_umring_faellt_auf_stufe2_zurueck
Prüft, dass ein leeres Ergebnis von boundary() auf die manuelle Ringextraktion zurückfällt.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_stufe1_fehler_faellt_auf_stufe2_zurueck
Prüft, dass ein Fehler in boundary() auf die manuelle Ringextraktion zurückfällt.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_stufe3_fallback_wenn_keine_ringe_extrahierbar
Prüft, dass bei fehlgeschlagener Ringextraktion auf convertToType(1, True) zurückgefallen wird.grüngeprüft am 2026-10-26
PolygonZuLinieTests
test_alle_stufen_scheitern_liefert_none
Prüft, dass polygon_zu_linie None liefert, wenn Ringextraktion und convertToType beide scheitern.grüngeprüft am 2026-10-26
LayerExistsInGpkgTests
test_fehlende_datei_liefert_false
Prüft, dass eine nicht vorhandene GPKG-Datei False liefert.grüngeprüft am 2026-10-26
LayerExistsInGpkgTests
test_leerer_pfad_oder_layername_liefert_false
Prüft, dass ein leerer Pfad oder Layername False liefert.grüngeprüft am 2026-10-26
LayerExistsInGpkgTests
test_vorhandener_layer_liefert_true
Prüft, dass ein in gpkg_contents eingetragener Layername als vorhanden erkannt wird.grüngeprüft am 2026-10-26
LayerExistsInGpkgTests
test_fehlender_layer_liefert_false
Prüft, dass ein nicht in gpkg_contents eingetragener Layername als nicht vorhanden gilt.grüngeprüft am 2026-10-26
CreateBufferLayerTests
test_ohne_qgis_liefert_none
Prüft, dass create_buffer_layer ohne verfügbares QGIS None liefert.grüngeprüft am 2026-10-26
CreateBufferLayerTests
test_fehlender_source_layer_liefert_none
Prüft, dass ein fehlender Quelllayer (None) None liefert, auch wenn QGIS verfügbar wäre.grüngeprüft am 2026-10-26
CreateBufferLayerTests
test_source_layer_ohne_getfeatures_liefert_none
Prüft, dass ein Quelllayer ohne getFeatures()-Methode None liefert.grüngeprüft am 2026-10-26
CreateBufferLayerTests
test_source_layer_ohne_features_liefert_none
Prüft, dass ein Quelllayer ohne Features None liefert, statt einen leeren Pufferlayer anzulegen.grüngeprüft am 2026-10-26

Tests für sn_basis/functions/qgisui_wrapper.py::add_layer_to_project/find_dock_widgets/add_menu/remove_menu (Issue #65/#67).

AddLayerToProjectTests 4FindDockWidgetsTests 3AddRemoveMenuTests 6
flowchart TD
   root(["test_qgisui_wrapper_helpers.py"])
   class root rootnode
   root --> g1["AddLayerToProjectTests (4)"]
@@ -1063,13 +1063,14 @@
   g2 --> t5("ohne_main_window_liefert_leere_liste")
   g2 --> t6("liefert_dock_widgets_des_main_window")
   g2 --> t7("fehler_beim_suchen_liefert_leere_liste")
-  root --> g3["AddRemoveMenuTests (5)"]
+  root --> g3["AddRemoveMenuTests (6)"]
   class g3 groupnode
   g3 --> t8("add_menu_ohne_main_window_tut_nichts")
   g3 --> t9("add_menu_mit_echtem_qt_menu_fuegt_es_der_menubar_hinzu")
   g3 --> t10("add_menu_ohne_menuaction_wird_ignoriert")
   g3 --> t11("remove_menu_entfernt_ueber_menuaction")
-  g3 --> t12("remove_menu_ohne_main_window_tut_nichts")
+  g3 --> t12("remove_menu_ohne_menuaction_wird_ignoriert")
+  g3 --> t13("remove_menu_ohne_main_window_tut_nichts")
   class t1 ok
   class t2 ok
   class t3 ok
@@ -1082,11 +1083,12 @@
   class t10 ok
   class t11 ok
   class t12 ok
+  class t13 ok
   classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
   classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
   classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
   classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
-  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
AddLayerToProjectTests
test_none_layer_liefert_false
Prüft, dass add_layer_to_project für einen fehlenden Layer (None) False liefert.grünnie geprüft
AddLayerToProjectTests
test_mock_modus_liefert_true_ohne_projektzugriff
Prüft, dass im Mock-Modus (ohne QGIS) ein gültiger Layer True liefert, ohne das Projekt anzufassen.grünnie geprüft
AddLayerToProjectTests
test_mit_qgis_fuegt_layer_dem_projekt_hinzu
Prüft, dass bei verfügbarem QGIS der Layer über QgsProject.instance().addMapLayer hinzugefügt wird.grünnie geprüft
AddLayerToProjectTests
test_mit_qgis_fehler_liefert_false
Prüft, dass ein Fehler beim Hinzufügen zum Projekt abgefangen wird und False liefert.grünnie geprüft
FindDockWidgetsTests
test_ohne_main_window_liefert_leere_liste
Prüft, dass find_dock_widgets ohne verfügbares Hauptfenster eine leere Liste liefert.grünnie geprüft
FindDockWidgetsTests
test_liefert_dock_widgets_des_main_window
Prüft, dass find_dock_widgets die vom Hauptfenster gefundenen Dock-Widgets durchreicht.grünnie geprüft
FindDockWidgetsTests
test_fehler_beim_suchen_liefert_leere_liste
Prüft, dass ein Fehler beim Suchen der Dock-Widgets abgefangen wird und eine leere Liste liefert.grünnie geprüft
AddRemoveMenuTests
test_add_menu_ohne_main_window_tut_nichts
Prüft, dass add_menu ohne Hauptfenster keine Ausnahme wirft.grünnie geprüft
AddRemoveMenuTests
test_add_menu_mit_echtem_qt_menu_fuegt_es_der_menubar_hinzu
Prüft, dass ein echtes Qt-Menü (mit menuAction) der Menüleiste hinzugefügt wird.grünnie geprüft
AddRemoveMenuTests
test_add_menu_ohne_menuaction_wird_ignoriert
Prüft, dass ein Objekt ohne menuAction nicht an die Menüleiste übergeben wird.grünnie geprüft
AddRemoveMenuTests
test_remove_menu_entfernt_ueber_menuaction
Prüft, dass remove_menu das Menü über dessen menuAction() aus der Menüleiste entfernt.grünnie geprüft
AddRemoveMenuTests
test_remove_menu_ohne_main_window_tut_nichts
Prüft, dass remove_menu ohne Hauptfenster keine Ausnahme wirft.grünnie geprüft

— (Docstring fehlt)

TestSettingsLogic 4
flowchart TD
+  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
AddLayerToProjectTests
test_none_layer_liefert_false
Prüft, dass add_layer_to_project für einen fehlenden Layer (None) False liefert.grüngeprüft am 2026-10-26
AddLayerToProjectTests
test_mock_modus_liefert_true_ohne_projektzugriff
Prüft, dass im Mock-Modus (ohne QGIS) ein gültiger Layer True liefert, ohne das Projekt anzufassen.grüngeprüft am 2026-10-26
AddLayerToProjectTests
test_mit_qgis_fuegt_layer_dem_projekt_hinzu
Prüft, dass bei verfügbarem QGIS der Layer über QgsProject.instance().addMapLayer hinzugefügt wird.grüngeprüft am 2026-10-26
AddLayerToProjectTests
test_mit_qgis_fehler_liefert_false
Prüft, dass ein Fehler beim Hinzufügen zum Projekt abgefangen wird und False liefert.grüngeprüft am 2026-10-26
FindDockWidgetsTests
test_ohne_main_window_liefert_leere_liste
Prüft, dass find_dock_widgets ohne verfügbares Hauptfenster eine leere Liste liefert.grüngeprüft am 2026-10-26
FindDockWidgetsTests
test_liefert_dock_widgets_des_main_window
Prüft, dass find_dock_widgets im Hauptfenster nach QDockWidget sucht und die Treffer durchreicht.grüngeprüft am 2026-10-26
FindDockWidgetsTests
test_fehler_beim_suchen_liefert_leere_liste
Prüft, dass ein Fehler beim Suchen der Dock-Widgets abgefangen wird und eine leere Liste liefert.grüngeprüft am 2026-10-26
AddRemoveMenuTests
test_add_menu_ohne_main_window_tut_nichts
Prüft, dass add_menu ohne Hauptfenster keine Ausnahme wirft.grüngeprüft am 2026-10-26
AddRemoveMenuTests
test_add_menu_mit_echtem_qt_menu_fuegt_es_der_menubar_hinzu
Prüft, dass ein echtes Qt-Menü (mit menuAction) der Menüleiste hinzugefügt wird.grüngeprüft am 2026-10-26
AddRemoveMenuTests
test_add_menu_ohne_menuaction_wird_ignoriert
Prüft, dass ein Objekt ohne menuAction nicht an die Menüleiste übergeben wird.grüngeprüft am 2026-10-26
AddRemoveMenuTests
test_remove_menu_entfernt_ueber_menuaction
Prüft, dass remove_menu das Menü über dessen menuAction() aus der Menüleiste entfernt.grüngeprüft am 2026-10-26
AddRemoveMenuTests
test_remove_menu_ohne_menuaction_wird_ignoriert
Prüft, dass remove_menu ein Objekt ohne menuAction nicht aus der Menüleiste zu entfernen versucht.grüngeprüft am 2026-10-26
AddRemoveMenuTests
test_remove_menu_ohne_main_window_tut_nichts
Prüft, dass remove_menu ohne Hauptfenster keine Ausnahme wirft.grüngeprüft am 2026-10-26

— (Docstring fehlt)

TestSettingsLogic 4
flowchart TD
   root(["test_settings_logic.py"])
   class root rootnode
   root --> g1["TestSettingsLogic (4)"]
diff --git a/docs/tests/testkatalog.md b/docs/tests/testkatalog.md
index 00b480f..970397f 100644
--- a/docs/tests/testkatalog.md
+++ b/docs/tests/testkatalog.md
@@ -8,21 +8,21 @@ für die fachliche Frage, ob die Abdeckung sinnvoll ist. Die Angaben stammen aus
 selbst (Docstrings) und aus der Testbaseline.
 
 Stand der Baseline: `docs/status/testbaseline.json` (SHA-256 `aeabc946a7f3`)
-Stand des Prüf-Audits: `docs/status/testpruefungen.json` (SHA-256 `b2525df27b91`)
+Stand des Prüf-Audits: `docs/status/testpruefungen.json` (SHA-256 `7df562788eb6`)
 
-Gesamt: 3 Pakete, 55 Testdateien, 689 Testfälle – 646 grün, 35 rot (Baseline), 8 übersprungen.
-Mit Beschreibung (Docstring): 544 von 689 (79 %).
-Fachlich geprüft: 244 von 689 (35 %) aktuell, 0 veraltet seit Codeänderung, 445 nie geprüft.
+Gesamt: 3 Pakete, 55 Testdateien, 690 Testfälle – 647 grün, 35 rot (Baseline), 8 übersprungen.
+Mit Beschreibung (Docstring): 545 von 690 (79 %).
+Fachlich geprüft: 257 von 690 (37 %) aktuell, 0 veraltet seit Codeänderung, 433 nie geprüft.
 Strukturelle Lücken (heuristisch, Namensabgleich): 160 von 470 (34 %) Funktionen/Methoden ohne erkennbaren Testbezug – Abschnitt „Ungetestete Funktionen“.
 
 ## Zusammenfassung
 
 | Paket | Testdateien | Testfälle | grün | rot (Baseline) | übersprungen | mit Beschreibung | fachlich geprüft | ohne Testbezug |
 | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
-| `sn_basis` | 32 | 356 | 356 | 0 | 0 | 356 von 356 (100 %) | 244 von 356 (69 %) | 70 von 229 (31 %) |
+| `sn_basis` | 32 | 357 | 357 | 0 | 0 | 357 von 357 (100 %) | 257 von 357 (72 %) | 70 von 229 (31 %) |
 | `sn_verfahrensgebiet` | 18 | 289 | 247 | 34 | 8 | 187 von 289 (65 %) | 0 von 289 (0 %) | 51 von 161 (32 %) |
 | `sn_plan41` | 5 | 44 | 43 | 1 | 0 | 1 von 44 (2 %) | 0 von 44 (0 %) | 39 von 80 (49 %) |
-| **Summe** | **55** | **689** | **646** | **35** | **8** | **544 von 689 (79 %)** | **244 von 689 (35 %)** | **160 von 470 (34 %)** |
+| **Summe** | **55** | **690** | **647** | **35** | **8** | **545 von 690 (79 %)** | **257 von 690 (37 %)** | **160 von 470 (34 %)** |
 
 ### Legende
 
@@ -36,7 +36,7 @@ Strukturelle Lücken (heuristisch, Namensabgleich): 160 von 470 (34 %) Funktione
 
 ## Paket `sn_basis`
 
-Plattform-Plugin, Ordner `Plugin_SN_Basis` – 32 Testdateien mit 356 Testfällen (356 grün, 0 rot, 0 übersprungen).
+Plattform-Plugin, Ordner `Plugin_SN_Basis` – 32 Testdateien mit 357 Testfällen (357 grün, 0 rot, 0 übersprungen).
 
 ### `Plugin_SN_Basis/tests/test_base_dockwidget.py`
 
@@ -644,22 +644,23 @@ Testgruppen:
 
 - `AddLayerToProjectTests` (4 Testfälle): — (Docstring fehlt)
 - `FindDockWidgetsTests` (3 Testfälle): — (Docstring fehlt)
-- `AddRemoveMenuTests` (5 Testfälle): — (Docstring fehlt)
+- `AddRemoveMenuTests` (6 Testfälle): — (Docstring fehlt)
 
 | Testfall | prüft | Status | geprüft |
 | --- | --- | --- | --- |
-| `AddLayerToProjectTests.test_none_layer_liefert_false` | Prüft, dass add_layer_to_project für einen fehlenden Layer (None) False liefert. | grün | nie geprüft |
-| `AddLayerToProjectTests.test_mock_modus_liefert_true_ohne_projektzugriff` | Prüft, dass im Mock-Modus (ohne QGIS) ein gültiger Layer True liefert, ohne das Projekt anzufassen. | grün | nie geprüft |
-| `AddLayerToProjectTests.test_mit_qgis_fuegt_layer_dem_projekt_hinzu` | Prüft, dass bei verfügbarem QGIS der Layer über QgsProject.instance().addMapLayer hinzugefügt wird. | grün | nie geprüft |
-| `AddLayerToProjectTests.test_mit_qgis_fehler_liefert_false` | Prüft, dass ein Fehler beim Hinzufügen zum Projekt abgefangen wird und False liefert. | grün | nie geprüft |
-| `FindDockWidgetsTests.test_ohne_main_window_liefert_leere_liste` | Prüft, dass find_dock_widgets ohne verfügbares Hauptfenster eine leere Liste liefert. | grün | nie geprüft |
-| `FindDockWidgetsTests.test_liefert_dock_widgets_des_main_window` | Prüft, dass find_dock_widgets die vom Hauptfenster gefundenen Dock-Widgets durchreicht. | grün | nie geprüft |
-| `FindDockWidgetsTests.test_fehler_beim_suchen_liefert_leere_liste` | Prüft, dass ein Fehler beim Suchen der Dock-Widgets abgefangen wird und eine leere Liste liefert. | grün | nie geprüft |
-| `AddRemoveMenuTests.test_add_menu_ohne_main_window_tut_nichts` | Prüft, dass add_menu ohne Hauptfenster keine Ausnahme wirft. | grün | nie geprüft |
-| `AddRemoveMenuTests.test_add_menu_mit_echtem_qt_menu_fuegt_es_der_menubar_hinzu` | Prüft, dass ein echtes Qt-Menü (mit menuAction) der Menüleiste hinzugefügt wird. | grün | nie geprüft |
-| `AddRemoveMenuTests.test_add_menu_ohne_menuaction_wird_ignoriert` | Prüft, dass ein Objekt ohne menuAction nicht an die Menüleiste übergeben wird. | grün | nie geprüft |
-| `AddRemoveMenuTests.test_remove_menu_entfernt_ueber_menuaction` | Prüft, dass remove_menu das Menü über dessen menuAction() aus der Menüleiste entfernt. | grün | nie geprüft |
-| `AddRemoveMenuTests.test_remove_menu_ohne_main_window_tut_nichts` | Prüft, dass remove_menu ohne Hauptfenster keine Ausnahme wirft. | grün | nie geprüft |
+| `AddLayerToProjectTests.test_none_layer_liefert_false` | Prüft, dass add_layer_to_project für einen fehlenden Layer (None) False liefert. | grün | geprüft am 2026-10-26 |
+| `AddLayerToProjectTests.test_mock_modus_liefert_true_ohne_projektzugriff` | Prüft, dass im Mock-Modus (ohne QGIS) ein gültiger Layer True liefert, ohne das Projekt anzufassen. | grün | geprüft am 2026-10-26 |
+| `AddLayerToProjectTests.test_mit_qgis_fuegt_layer_dem_projekt_hinzu` | Prüft, dass bei verfügbarem QGIS der Layer über QgsProject.instance().addMapLayer hinzugefügt wird. | grün | geprüft am 2026-10-26 |
+| `AddLayerToProjectTests.test_mit_qgis_fehler_liefert_false` | Prüft, dass ein Fehler beim Hinzufügen zum Projekt abgefangen wird und False liefert. | grün | geprüft am 2026-10-26 |
+| `FindDockWidgetsTests.test_ohne_main_window_liefert_leere_liste` | Prüft, dass find_dock_widgets ohne verfügbares Hauptfenster eine leere Liste liefert. | grün | geprüft am 2026-10-26 |
+| `FindDockWidgetsTests.test_liefert_dock_widgets_des_main_window` | Prüft, dass find_dock_widgets im Hauptfenster nach QDockWidget sucht und die Treffer durchreicht. | grün | geprüft am 2026-10-26 |
+| `FindDockWidgetsTests.test_fehler_beim_suchen_liefert_leere_liste` | Prüft, dass ein Fehler beim Suchen der Dock-Widgets abgefangen wird und eine leere Liste liefert. | grün | geprüft am 2026-10-26 |
+| `AddRemoveMenuTests.test_add_menu_ohne_main_window_tut_nichts` | Prüft, dass add_menu ohne Hauptfenster keine Ausnahme wirft. | grün | geprüft am 2026-10-26 |
+| `AddRemoveMenuTests.test_add_menu_mit_echtem_qt_menu_fuegt_es_der_menubar_hinzu` | Prüft, dass ein echtes Qt-Menü (mit menuAction) der Menüleiste hinzugefügt wird. | grün | geprüft am 2026-10-26 |
+| `AddRemoveMenuTests.test_add_menu_ohne_menuaction_wird_ignoriert` | Prüft, dass ein Objekt ohne menuAction nicht an die Menüleiste übergeben wird. | grün | geprüft am 2026-10-26 |
+| `AddRemoveMenuTests.test_remove_menu_entfernt_ueber_menuaction` | Prüft, dass remove_menu das Menü über dessen menuAction() aus der Menüleiste entfernt. | grün | geprüft am 2026-10-26 |
+| `AddRemoveMenuTests.test_remove_menu_ohne_menuaction_wird_ignoriert` | Prüft, dass remove_menu ein Objekt ohne menuAction nicht aus der Menüleiste zu entfernen versucht. | grün | geprüft am 2026-10-26 |
+| `AddRemoveMenuTests.test_remove_menu_ohne_main_window_tut_nichts` | Prüft, dass remove_menu ohne Hauptfenster keine Ausnahme wirft. | grün | geprüft am 2026-10-26 |
 
 ### `Plugin_SN_Basis/tests/test_settings_logic.py`
 
@@ -1441,7 +1442,7 @@ Arbeitsliste: Diese Testfälle haben keinen Docstring; was sie fachlich prüfen,
 aus dem Quelltext erschließen. Jeder Eintrag braucht eine einzeilige Beschreibung im Testfall,
 dann verschwindet er hier von selbst.
 
-### `sn_basis` – 0 von 356 Testfällen ohne Beschreibung
+### `sn_basis` – 0 von 357 Testfällen ohne Beschreibung
 
 Keine Lücken.