5.6 KiB
Testbericht
Stand: 24. Juli 2026
Ergebnisübersicht
| Prüfung | Ergebnis | Nachweis |
|---|---|---|
| Vollständiger Quellen- und Fixture-Audit | bestanden | docs/SOURCE_ANALYSIS.md, build-logs/source-audit.json |
| Vergleich aktueller Plugins gegen v2.0-Bundle | bestanden | nur erzeugte __pycache__-Dateien unterscheiden sich; build-logs/source-diff.log |
| Vorhandene Backend-Plugin-Tests | 11 bestanden, 8 übersprungen | build-logs/backend-plugin-tests.log |
| Statische Android-Akzeptanzprüfung | 728 bestanden | build-logs/static-acceptance.log |
| Ressourcenprüfung | 8 JSON- und 7 XML-Dateien parsebar | build-logs/resource-validation.log |
| Kotlin-Parserprüfung ohne Android-Classpath | keine Syntax-/Parserdiagnosen | build-logs/kotlinc-syntax-summary.txt |
./gradlew test |
nicht ausführbar in dieser Umgebung | Wrapper-Download scheitert an nicht auflösbarem services.gradle.org; build-logs/gradle-test.log |
./gradlew lintDebug |
nicht ausführbar in dieser Umgebung | gleicher Infrastrukturfehler; build-logs/gradle-lintDebug.log |
./gradlew assembleDebug |
nicht ausführbar in dieser Umgebung | gleicher Infrastrukturfehler; build-logs/gradle-assembleDebug.log |
| Debug-APK | nicht erzeugt | ohne Gradle-Distribution, Android SDK und aufgelöste Abhängigkeiten wäre ein APK nicht verifizierbar |
Ausgeführte Backendtests
Ausgeführt im vollständigen boehmitools-Quellstand:
python3 -m pytest -q \
plugins/trainingsplan/tests \
plugins/trainingstracker/tests
Ergebnis:
11 passed, 8 skipped in 0.05s
Die übersprungenen Tests stammen aus den gelieferten Testsets und wurden nicht von der Android-Implementierung ausgeblendet.
Android-Tests im Projekt
Unit- und Fixture-Tests
FixtureContractTest prüft unter anderem:
- beide gelieferten Pläne mit
schema_version = 3undcontract_version = 2, - vollständige und entitätsspezifisch eindeutige stabile IDs,
- explizite
result_schema-Definitionen aller Übungen und Progressionsstufen, - Laden beider Planvarianten,
- Migration beider alten Sessiondateien ohne Itemverlust,
- Priorität manuelle Anpassung → Progressionsstufe → Übung → Fallback,
- Vererbung nicht überschriebener result_schema-Felder,
- sichere Löschung inkompatibler Messwerte bei Einheit-/Seitenwechsel,
- Normalisierung alter Freitextergebnisse zu
result_dataVersion 2, - FIFO-Overlay ausstehender Session-Patches nach App-Neustart,
- Überschreibmodell für genau eine Wochen- beziehungsweise Gesamtanalyse.
ApiContractTest verwendet MockWebServer und prüft:
- exakten Session-Patch-Pfad,
PATCH, Basic-Auth-Header undexpected_revision, 202 Acceptedsowie200am selben Analyse-Endpunkt,- unveränderte Weitergabe von
401und409 revision_conflict, - dokumentierte Editor-, Publish- und Vorschlagsstatus-Pfade.
Repository- und Instrumentationstests
RepositoryIntegrationTest prüft mit Room, WorkManager und MockWebServer:
- Netzantwort und Room-Cache,
- sichtbare
409-Weitergabe ohne Umwandlung in einen scheinbaren Offline-Erfolg, - Erhalt des HTTP-Status
202für die dauerhafte Analyse-Sperre.
CompactEditorUiTest setzt eine 360-dp-breite Compose-Oberfläche auf und prüft, dass lange Übungsnamen und strukturierte Ergebnisse innerhalb der verfügbaren Breite bleiben.
Diese Android-Tests sind vollständig im Projekt vorhanden, konnten in diesem Container aber nicht gestartet werden, weil bereits der Gradle-Wrapper-Download vor der Projektauswertung fehlschlägt.
Statische Akzeptanzprüfung
Ausgeführt:
python3 tools/static_acceptance.py
Ergebnis:
PASS: 728 Prüfungen
Die Prüfung deckt Buildparameter, Release-Netzwerksicherheit, Standardserver, verbotene WebView/OpenAI-Verbindungen, Basic Auth, zentrale API-Routen sowie alle gelieferten Plan- und Session-Fixtures ab.
Kotlin-Parserprüfung
Alle Kotlin-Dateien wurden zusätzlich mit dem vorhandenen standalone kotlinc eingelesen. Da Android SDK und Maven-/Gradle-Abhängigkeiten fehlen, entstehen erwartungsgemäß nicht auflösbare Android-, Compose-, Hilt-, Retrofit- und Serialization-Symbole. Die separat gefilterte Prüfung meldet jedoch keine Parserfehler wie ungeschlossene Blöcke, illegale Escapes oder unerwartete Tokens.
Dies ersetzt keinen echten Gradle-Compile-Lauf. Das vollständige Rohprotokoll ist deshalb nur Diagnosematerial und kein Bestehensnachweis.
Blocker der geforderten Gradle-Läufe
Alle drei vorgeschriebenen Befehle wurden separat ausgeführt und protokolliert. Die Laufumgebung enthält:
- keine installierte Gradle-Distribution,
- kein Android SDK, kein
sdkmanager, keinadb, - keinen vorgefüllten Gradle- oder Maven-Cache,
- keine DNS-Auflösung für
services.gradle.orgaus Shell-Prozessen.
Der mitgelieferte Wrapper versucht korrekt Gradle 8.11.1 zu laden und beendet sich mit UnknownHostException. Der Fehler tritt vor der Auswertung von settings.gradle.kts und damit vor Kompilierung, Tests, Lint oder APK-Erzeugung auf. Details stehen in build-logs/build-environment.log und den drei Gradle-Protokollen.
Lokal nachzuholende Abnahme
In einer normalen Android-Entwicklungsumgebung mit JDK 17, Android SDK 35 und Internetzugang:
./gradlew test
./gradlew lintDebug
./gradlew assembleDebug
Anschließend ist zusätzlich empfehlenswert:
./gradlew connectedDebugAndroidTest
adb install -r app/build/outputs/apk/debug/app-debug.apk
Die erwartete APK-Ausgabe ist app/build/outputs/apk/debug/app-debug.apk. Bis diese Befehle erfolgreich gelaufen sind, darf das Projekt nicht als vollständig buildverifiziert bezeichnet werden.