Test-Audit sn_basis fortgesetzt: message_wrapper.py fachlich geprüft (#76)

5 Testfälle fachlich geprüft und markiert: test_message_wrapper.py komplett (inkl.
1 neuer Test für die Meldungsstufen von info/warning/error/success). Nebenbefund:
die Namens-Heuristik des Testkatalogs führte warning als referenziert, weil es in
test_pruefmanager/test_dockmanager nur per @patch ersetzt wird (bekannte, in
testkatalog.py dokumentierte Grenze).

Testkatalog neu erzeugt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-23 09:33:26 +02:00
co-authored by Claude Opus 5.5
parent e747b2227b
commit decd2a0002
3 changed files with 50 additions and 29 deletions
+20
View File
@@ -611,6 +611,26 @@
"datum": "2026-09-23", "datum": "2026-09-23",
"hash": "83fd0b51b9df" "hash": "83fd0b51b9df"
}, },
"sn_basis.tests.test_message_wrapper.GetMessageBarTests.test_faellt_bei_fehlerhaftem_iface_auf_mock_bar_zurueck": {
"datum": "2026-09-23",
"hash": "dc6c3cdbfae1"
},
"sn_basis.tests.test_message_wrapper.GetMessageBarTests.test_liefert_objekt_mit_pushmessage_methode": {
"datum": "2026-09-23",
"hash": "e9d99a0b1f02"
},
"sn_basis.tests.test_message_wrapper.MeldungsstufenTests.test_info_warning_error_success_setzen_die_passende_meldungsstufe": {
"datum": "2026-09-23",
"hash": "04f2f5ea94e9"
},
"sn_basis.tests.test_message_wrapper.PushMessageTests.test_fehler_in_der_message_bar_wird_abgefangen": {
"datum": "2026-09-23",
"hash": "a8fdcf8ba3b8"
},
"sn_basis.tests.test_message_wrapper.PushMessageTests.test_liefert_dict_mit_titel_text_level_und_dauer": {
"datum": "2026-09-23",
"hash": "525b2fdab218"
},
"sn_basis.tests.test_pruefmanager.TestPruefmanager.test_datei_existiert_append": { "sn_basis.tests.test_pruefmanager.TestPruefmanager.test_datei_existiert_append": {
"datum": "2026-09-17", "datum": "2026-09-17",
"hash": "25e169c45423" "hash": "25e169c45423"
File diff suppressed because one or more lines are too long
+16 -19
View File
@@ -8,21 +8,21 @@ für die fachliche Frage, ob die Abdeckung sinnvoll ist. Die Angaben stammen aus
selbst (Docstrings) und aus der Testbaseline. selbst (Docstrings) und aus der Testbaseline.
Stand der Baseline: `docs/status/testbaseline.json` (SHA-256 `aeabc946a7f3`) Stand der Baseline: `docs/status/testbaseline.json` (SHA-256 `aeabc946a7f3`)
Stand des Prüf-Audits: `docs/status/testpruefungen.json` (SHA-256 `86bcb6ced85a`) Stand des Prüf-Audits: `docs/status/testpruefungen.json` (SHA-256 `4ed158c391ca`)
Gesamt: 3 Pakete, 49 Testdateien, 596 Testfälle – 553 grün, 35 rot (Baseline), 8 übersprungen. Gesamt: 3 Pakete, 49 Testdateien, 597 Testfälle – 554 grün, 35 rot (Baseline), 8 übersprungen.
Mit Beschreibung (Docstring): 451 von 596 (76 %). Mit Beschreibung (Docstring): 452 von 597 (76 %).
Fachlich geprüft: 176 von 596 (30 %) aktuell, 0 veraltet seit Codeänderung, 420 nie geprüft. Fachlich geprüft: 181 von 597 (30 %) aktuell, 0 veraltet seit Codeänderung, 416 nie geprüft.
Strukturelle Lücken (heuristisch, Namensabgleich): 145 von 413 (35 %) Funktionen/Methoden ohne erkennbaren Testbezug – Abschnitt „Ungetestete Funktionen“. Strukturelle Lücken (heuristisch, Namensabgleich): 143 von 413 (35 %) Funktionen/Methoden ohne erkennbaren Testbezug – Abschnitt „Ungetestete Funktionen“.
## Zusammenfassung ## Zusammenfassung
| Paket | Testdateien | Testfälle | grün | rot (Baseline) | übersprungen | mit Beschreibung | fachlich geprüft | ohne Testbezug | | Paket | Testdateien | Testfälle | grün | rot (Baseline) | übersprungen | mit Beschreibung | fachlich geprüft | ohne Testbezug |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| `sn_basis` | 32 | 344 | 344 | 0 | 0 | 344 von 344 (100 %) | 176 von 344 (51 %) | 72 von 229 (31 %) | | `sn_basis` | 32 | 345 | 345 | 0 | 0 | 345 von 345 (100 %) | 181 von 345 (52 %) | 70 von 229 (31 %) |
| `sn_verfahrensgebiet` | 12 | 208 | 166 | 34 | 8 | 106 von 208 (51 %) | 0 von 208 (0 %) | 34 von 104 (33 %) | | `sn_verfahrensgebiet` | 12 | 208 | 166 | 34 | 8 | 106 von 208 (51 %) | 0 von 208 (0 %) | 34 von 104 (33 %) |
| `sn_plan41` | 5 | 44 | 43 | 1 | 0 | 1 von 44 (2 %) | 0 von 44 (0 %) | 39 von 80 (49 %) | | `sn_plan41` | 5 | 44 | 43 | 1 | 0 | 1 von 44 (2 %) | 0 von 44 (0 %) | 39 von 80 (49 %) |
| **Summe** | **49** | **596** | **553** | **35** | **8** | **451 von 596 (76 %)** | **176 von 596 (30 %)** | **145 von 413 (35 %)** | | **Summe** | **49** | **597** | **554** | **35** | **8** | **452 von 597 (76 %)** | **181 von 597 (30 %)** | **143 von 413 (35 %)** |
### Legende ### Legende
@@ -36,7 +36,7 @@ Strukturelle Lücken (heuristisch, Namensabgleich): 145 von 413 (35 %) Funktione
## Paket `sn_basis` ## Paket `sn_basis`
Plattform-Plugin, Ordner `Plugin_SN_Basis` – 32 Testdateien mit 344 Testfällen (344 grün, 0 rot, 0 übersprungen). Plattform-Plugin, Ordner `Plugin_SN_Basis` – 32 Testdateien mit 345 Testfällen (345 grün, 0 rot, 0 übersprungen).
### `Plugin_SN_Basis/tests/test_base_dockwidget.py` ### `Plugin_SN_Basis/tests/test_base_dockwidget.py`
@@ -384,13 +384,15 @@ Testgruppen:
- `GetMessageBarTests` (2 Testfälle): — (Docstring fehlt) - `GetMessageBarTests` (2 Testfälle): — (Docstring fehlt)
- `PushMessageTests` (2 Testfälle): — (Docstring fehlt) - `PushMessageTests` (2 Testfälle): — (Docstring fehlt)
- `MeldungsstufenTests` (1 Testfälle): — (Docstring fehlt)
| Testfall | prüft | Status | geprüft | | Testfall | prüft | Status | geprüft |
| --- | --- | --- | --- | | --- | --- | --- | --- |
| `GetMessageBarTests.test_liefert_objekt_mit_pushmessage_methode` | Prüft, dass _get_message_bar ein Objekt mit aufrufbarer pushMessage()-Methode liefert. | grün | nie geprüft | | `GetMessageBarTests.test_liefert_objekt_mit_pushmessage_methode` | Prüft, dass _get_message_bar ein Objekt mit aufrufbarer pushMessage()-Methode liefert. | grün | geprüft am 2026-09-23 |
| `GetMessageBarTests.test_faellt_bei_fehlerhaftem_iface_auf_mock_bar_zurueck` | Prüft, dass ein Fehler beim Zugriff auf iface.messageBar() auf eine funktionierende Mock-MessageBar zurückfällt. | grün | nie geprüft | | `GetMessageBarTests.test_faellt_bei_fehlerhaftem_iface_auf_mock_bar_zurueck` | Prüft, dass ein Fehler beim Zugriff auf iface.messageBar() auf eine funktionierende Mock-MessageBar zurückfällt. | grün | geprüft am 2026-09-23 |
| `PushMessageTests.test_liefert_dict_mit_titel_text_level_und_dauer` | Prüft, dass push_message im Mock-Modus ein Dict mit den übergebenen Werten liefert. | grün | nie geprüft | | `PushMessageTests.test_liefert_dict_mit_titel_text_level_und_dauer` | Prüft, dass push_message im Mock-Modus ein Dict mit den übergebenen Werten liefert. | grün | geprüft am 2026-09-23 |
| `PushMessageTests.test_fehler_in_der_message_bar_wird_abgefangen` | Prüft, dass eine fehlschlagende MessageBar push_message nicht zum Absturz bringt, sondern None liefert. | grün | nie geprüft | | `PushMessageTests.test_fehler_in_der_message_bar_wird_abgefangen` | Prüft, dass eine fehlschlagende MessageBar push_message nicht zum Absturz bringt, sondern None liefert. | grün | geprüft am 2026-09-23 |
| `MeldungsstufenTests.test_info_warning_error_success_setzen_die_passende_meldungsstufe` | Prüft, dass info, warning, error und success jeweils ihre eigene Qgis.MessageLevel-Stufe setzen und Titel, Text und Dauer weiterreichen. | grün | geprüft am 2026-09-23 |
### `Plugin_SN_Basis/tests/test_navigation.py` ### `Plugin_SN_Basis/tests/test_navigation.py`
@@ -1267,7 +1269,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, aus dem Quelltext erschließen. Jeder Eintrag braucht eine einzeilige Beschreibung im Testfall,
dann verschwindet er hier von selbst. dann verschwindet er hier von selbst.
### `sn_basis` – 0 von 344 Testfällen ohne Beschreibung ### `sn_basis` – 0 von 345 Testfällen ohne Beschreibung
Keine Lücken. Keine Lücken.
@@ -1473,7 +1475,7 @@ Keine Lücken.
Heuristik, kein Beweis: Diese Funktionen und Methoden kommen unter ihrem Namen in keiner Testdatei des Pakets vor. Das schließt nicht aus, dass sie indirekt über eine andere, getestete Funktion mitlaufen – umgekehrt gilt: Taucht der Name irgendwo in einer Testdatei auf, gilt die Funktion schon als referenziert, auch bei zufälliger Namensgleichheit mit etwas anderem. `main.py`/`__init__.py` (QGIS-Einstiegspunkte wie `classFactory`, `initGui`, `unload`) und Dunder-Methoden sind ausgenommen. Diese Liste ersetzt keine fachliche Prüfung, ob ein Test sinnvoll wäre – dafür braucht es einen Menschen, der die Funktion kennt. Heuristik, kein Beweis: Diese Funktionen und Methoden kommen unter ihrem Namen in keiner Testdatei des Pakets vor. Das schließt nicht aus, dass sie indirekt über eine andere, getestete Funktion mitlaufen – umgekehrt gilt: Taucht der Name irgendwo in einer Testdatei auf, gilt die Funktion schon als referenziert, auch bei zufälliger Namensgleichheit mit etwas anderem. `main.py`/`__init__.py` (QGIS-Einstiegspunkte wie `classFactory`, `initGui`, `unload`) und Dunder-Methoden sind ausgenommen. Diese Liste ersetzt keine fachliche Prüfung, ob ein Test sinnvoll wäre – dafür braucht es einen Menschen, der die Funktion kennt.
„beabsichtigt“ liest den Docstring der Funktion: Enthält er einen Vermerk wie „von Test abgesehen, weil …“ oder „Test ausgesetzt, zunächst Refactor“, gilt der fehlende Test als bewusste Entscheidung. Alles andere ist „ungeklärt“ – die eigentliche Arbeitsliste. „beabsichtigt“ liest den Docstring der Funktion: Enthält er einen Vermerk wie „von Test abgesehen, weil …“ oder „Test ausgesetzt, zunächst Refactor“, gilt der fehlende Test als bewusste Entscheidung. Alles andere ist „ungeklärt“ – die eigentliche Arbeitsliste.
### `sn_basis` – 72 von 229 (31 %) ohne Testbezug (0 ungeklärt, 72 beabsichtigt) ### `sn_basis` – 70 von 229 (31 %) ohne Testbezug (0 ungeklärt, 70 beabsichtigt)
#### `functions/dialog_wrapper.py` (9) #### `functions/dialog_wrapper.py` (9)
@@ -1487,11 +1489,6 @@ Heuristik, kein Beweis: Diese Funktionen und Methoden kommen unter ihrem Namen i
- `ProgressDialog.raise_to_front` (Zeile 389) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026 - `ProgressDialog.raise_to_front` (Zeile 389) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
- `create_progress_dialog` (Zeile 408) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026 - `create_progress_dialog` (Zeile 408) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
#### `functions/message_wrapper.py` (2)
- `info` (Zeile 67) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
- `success` (Zeile 84) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026
#### `functions/os_wrapper.py` (5) #### `functions/os_wrapper.py` (5)
- `normalize_path` (Zeile 43) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026 - `normalize_path` (Zeile 43) — **beabsichtigt:** von Test abgesehen, weil vernachlässigbar; HD 18.09.2026