Hallo,
aktuell frage ich mich, was eine gute Strategie für das UnitTesten ist.
Folgendes Beispiel soll meine Frage etwas verdeutlichen:
StreamExtensions.cs
-- ReadBytes(this Stream stream, ...)
-- WriteBytes(this Stream stream, ...)
Diese Extensions für die Stream Klasse ermöglichen es mir, an der aktuellen Position des Streams "n" bytes auszulesen und zurück zu geben. (Ähnlich der Read()-Methode)
File.cs
-- ReadByteBlocksFromFile(...)
-- ReadBytesFromFile(...)
-- WriteBytesToFile(...)
-- AppendByteToFile(...)
-- ...
Diese statischen Methoden ermöglichen es mir, Daten in eine Datei zu schreiben oder von da zu lesen.
Prinzipiell öffnen diese Methoden jeweils nur einen Stream und rufen über diesen die Extensions (siehe oben).
Nun habe ich die StreamExtensions komplett getestet und habe alle Ergebnisse sowie deren Verhalten validiert.
Ist es nun sinnvoll die Methoden der Klasse "File.cs" ebenfalls im Ergebnis zu validieren/testen?
Sprich: kommen wirklich die angeforderten Bytes zurück, sind es die richtigen Bytes, ist es die richtige Anzahl
an Bytes, ...?
Eigentlich habe ich das direkte Lesen aus dem Stream ja schon getestet?
Meine Möglichen Ansätze dazu sind:
- Alle Methoden komplett testen (Blackbox) - also auch nochmal das erwartete Ergebnis validieren
- Nur die jeweiligen "neuen" Dinge testen (Whitebox) - also nur schauen ob der Stream zur richtigen Datei aufgebaut wurde, ... und davon ausgehen,
das die jeweils gerufenen Methoden das leisten, was ich erwarte (es existieren für diese gerufen Methoden ja jeweils eigene Tests)
- die gerufenen Methoden über Stubs/Fakes mocken, so dass diese immer ein definiertes Ergebnis liefern und dann nur schauen,
ob die Methode die ich eigentlich teste diese Daten korrekt weiterreicht und ggf. weiterverarbeitet
(somit würden die Tests im Falle eines Fehlers einer gerufenen Methode trotzdem noch funktionieren und behalten ihre Aussagekraft?)
Oder sehe ich das ganze Thema zu einseitig und sollte die Methoden der Klasse "File.cs" eigentlich als eine Art Integrationsmethoden sehen,
die dann separat (und anders ..??) getestet werden sollten/können?
Ich hoffe ich konnte meine Frage genau genug darlegen,
Gruß Max