Unit-Tests: Room in-memory & JSON-Roundtrip #22

Closed
opened 2026-05-13 20:42:30 +00:00 by jreinemann-euris · 1 comment
jreinemann-euris commented 2026-05-13 20:42:30 +00:00 (Migrated from github.com)

Feature: Unit-Tests – Room & JSON

Part of: #5
Depends on: #17

Ziel

Alle Kernfunktionen der Datenschicht sind durch automatisierte Tests abgesichert.

Scope

  • LocalDateConverterTest: Null, valides Datum, ungültiger String
  • CategoryDaoTest: insert, getAll, update, delete (In-Memory-DB)
  • LocationDaoTest: insert, getAll, update, delete (In-Memory-DB)
  • ItemDaoTest: insert, getAll, getById, getByCategory, getExpiringSoon, update, delete
  • SettingsDaoTest: insert/upsert, getValue
  • JsonRoundtripTest: Export → Import → Vergleich (mehrere Items, verschiedene Felder)

Technische Hinweise

  • Test-Package: de.krisenvorrat.app (androidTest für Room, test für Converter + JSON)
  • Room In-Memory: Room.inMemoryDatabaseBuilder()
  • runTest aus kotlinx.coroutines.test für suspend-Tests
  • Testdaten-Builder oder Fixture-Klasse für wiederverwendbare Test-Entities

Akzeptanzkriterien

  • Alle Tests grün (./gradlew test)
  • Mind. 1 Positiv- und 1 Negativ-Test pro DAO
  • JSON-Roundtrip-Test ist verlustfrei verifiziert
  • Keine Flaky Tests (deterministische Testdaten)
## Feature: Unit-Tests – Room & JSON Part of: #5 Depends on: #17 ### Ziel Alle Kernfunktionen der Datenschicht sind durch automatisierte Tests abgesichert. ### Scope - `LocalDateConverterTest`: Null, valides Datum, ungültiger String - `CategoryDaoTest`: insert, getAll, update, delete (In-Memory-DB) - `LocationDaoTest`: insert, getAll, update, delete (In-Memory-DB) - `ItemDaoTest`: insert, getAll, getById, getByCategory, getExpiringSoon, update, delete - `SettingsDaoTest`: insert/upsert, getValue - `JsonRoundtripTest`: Export → Import → Vergleich (mehrere Items, verschiedene Felder) ### Technische Hinweise - Test-Package: `de.krisenvorrat.app` (androidTest für Room, test für Converter + JSON) - Room In-Memory: `Room.inMemoryDatabaseBuilder()` - `runTest` aus `kotlinx.coroutines.test` für suspend-Tests - Testdaten-Builder oder Fixture-Klasse für wiederverwendbare Test-Entities ### Akzeptanzkriterien - [ ] Alle Tests grün (`./gradlew test`) - [ ] Mind. 1 Positiv- und 1 Negativ-Test pro DAO - [ ] JSON-Roundtrip-Test ist verlustfrei verifiziert - [ ] Keine Flaky Tests (deterministische Testdaten)
jreinemann-euris commented 2026-05-13 22:33:08 +00:00 (Migrated from github.com)

Abgeschlossen (2026-05-14)

Zyklen: 1
Tests: 33 Unit Tests, 0 Fehler (debug + release)

Implementierte Artefakte

  • LocalDateConverterTest: 5 Tests (inkl. Negativ-Test für ungültigen String)
  • CategoryDaoTest: 5 Tests (inkl. getAll mit mehreren Einträgen)
  • LocationDaoTest: 5 Tests (inkl. getAll mit mehreren Einträgen)
  • ItemDaoTest: 10 Tests (getAll, getById positiv/negativ, getExpiringSoon Bugfix)
  • SettingsDaoTest: 3 Tests (upsert, getValue, upsert-update)
  • JsonRoundtripTest: 3 Tests (verlustfreier Roundtrip, Nullable-Felder, leere DB)
  • TestFakes: Shared Test-Fakes extrahiert (Redeclaration-Bug behoben)

Abweichungen

  • ItemDaoTest: getExpiringSoon-Test war fehlerhaft (aufruf auf nicht-existente Methode getExpiringSoon(Int)) – korrigiert zu getExpiringSoonByCutoff(LocalDate)
  • Fake-DAOs aus ImportExportRepositoryImplTest in TestFakes.kt extrahiert um Redeclaration-Fehler zu vermeiden
## Abgeschlossen (2026-05-14) **Zyklen:** 1 **Tests:** ✅ 33 Unit Tests, 0 Fehler (debug + release) ### Implementierte Artefakte - ✅ LocalDateConverterTest: 5 Tests (inkl. Negativ-Test für ungültigen String) - ✅ CategoryDaoTest: 5 Tests (inkl. getAll mit mehreren Einträgen) - ✅ LocationDaoTest: 5 Tests (inkl. getAll mit mehreren Einträgen) - ✅ ItemDaoTest: 10 Tests (getAll, getById positiv/negativ, getExpiringSoon Bugfix) - ✅ SettingsDaoTest: 3 Tests (upsert, getValue, upsert-update) - ✅ JsonRoundtripTest: 3 Tests (verlustfreier Roundtrip, Nullable-Felder, leere DB) - ✅ TestFakes: Shared Test-Fakes extrahiert (Redeclaration-Bug behoben) ### Abweichungen - ItemDaoTest: getExpiringSoon-Test war fehlerhaft (aufruf auf nicht-existente Methode getExpiringSoon(Int)) – korrigiert zu getExpiringSoonByCutoff(LocalDate) - Fake-DAOs aus ImportExportRepositoryImplTest in TestFakes.kt extrahiert um Redeclaration-Fehler zu vermeiden
Sign in to join this conversation.
No description provided.