Best Practice Unit Tests von Readern

LouCyphre

Bekanntes Mitglied
Hallo,

ich habe mal eine allgemeine Frage, die theoretisch unabhängig von Java ist.

Stellt euch vor ich habe ein Interface für einen Reader ( IReader ) das eine Methode zum lesen von Daten signiert. Dieses Interface wird von einer Klasse Reader implementiert. Der Reader wiederum wird von einem Service via DI genutzt, was die gelesenen Daten verarbeitet. Ich habe jetzt Unit Tests für den Service geschrieben, würdet ihr auch für den Reader welche schreiben?

Wenn ja - mit welchem Sinn? Gehen wir mal von einer Datenbankabfrage aus, wäre die einzige Problematik, dass die Daten übergeben werden müssen, was ich im Falle von fehlenden Einträgen über eine Ausnahme behandle. Zum Szenario gehört, dassich davon ausgehe, dass die DB korrekt gepflegt wird und keine Typverletzungen oder ähnliches vorliegt. Ich würde eigentlich keine schreiben.

Was denkt ihr?
 
Wenn Reader public ist und public Methoden bereitstellt, dann müsste man dafür Tests schreiben. Denn dann kann Reader überall benutzt werden und nicht nur in einem beschränktem Kontext, der durch andere Tests abgedeckt ist.
 
Okay gut, aber ich frage mich wie die Tests dann aussehen sollen? Also ich mocke die Abfrage und dann habe ich ja quasi nur den happy path und alles andere wird durch die exception abgefangen. Der Reader ist außerdem recht spezifisch, also auf ein Szenario angepasst aufgrund des Rückgabewerts. Wie gesagt eigentlich kein Java Thema, eher allgemein Softwarearchitektur
 
Ich denke, es gibt einiges zu testen – neben dem Happy Path, der relativ einfach ist. Interessanter finde ich, ob im Fehlerfall ein wohldefiniertes Ergebnis geliefert wird. Hier ein paar Ideen:
  1. Werden die richtigen Exceptions mit der passenden Meldung geworfen?
  2. Wie verhält sich das System bei großen Datenmengen? Wird gepuffert oder alles auf einmal geladen? Besteht die Gefahr eines OutOfMemoryError?
  3. Werden Zeitgrenzen eingehalten, wenn etwas blockiert?
  4. Wie sieht es mit Threading aus? Kann der Reader per interrupt unterbrochen werden, und reagiert er korrekt auf den Abbruch?
Anstelle von Mocks kannst du eigene Dummies für solche Tests verwenden. Ein einfaches Beispiel:
Java:
interface IReader {

    byte[] read() throws IOException;

}



class DummyReader1 implements IReader {

    @Override

    public byte[] read() throws IOException {

        // Simulation der Fälle 1, 2, 3 und 4

    }

}
 

Zurück
Oben