objectbox / objectbox/objectbox-java
Make it easier to reliably test data observers
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Java
- Sterne
- 4.6k
- Forks
- 311
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
In my experience, testing data observers is somewhat brittle. Even with explicit transactions I sometimes get "delayed" notifications that have been triggered by the previous operation.
Let's take this test (ObjectBox 2.2.0 + RxJava 2):
boxStore.runInTx {
boxStore.boxFor(SomeEntity::class.java).put(SomeEntity())
}
val testObserver = TestObserver.create<Optional<SomeEntity>>()
boxStore.runInTx {
repository.find(123).subscribeWith(testObserver)
}
testObserver.awaitCount(1)
testObserver.assertValueCount(1)
Sometimes, I get a value count of 2 from the original put operation. For completeness, the code of the find() method:
fun find(id: Long): Observable<Optional<SomeEntity>> {
return Observable.create { emitter ->
val query = this.boxStore.boxFor(SomeEntity::class)
.query()
.equal(SomeEntity_.id, id)
.build()
query.subscribe().observer { result ->
emitter.onNext(result.firstOrNull().toOptional())
}
}
}
Assuming I did not misunderstand the docs or misuse the ObjectBox API, it would be great if ObjectBox could offer some method e.g. to block until all notifications triggered by the last transaction have been issued.
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne mit der im Issue gezeigten Sequenz aus runInTx, TestObserver und query.subscribe().observer und überprüfe anschließend das dadurch ausgeübte Verhalten von ObjectBox-Datenbeobachtern und Transaktionen. Die Arbeit ist abgeschlossen, wenn es eine zuverlässige Möglichkeit gibt, auf Benachrichtigungen der vorangegangenen Transaktion zu warten, nachgewiesen durch einen Test, der konsistent den erwarteten einzelnen Wert empfängt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- java, kotlin
- Bereich
- databases, testing
- Issue-Typ
- Feature
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 25/100