Ich arbeite an einem Projekt mit einigen Dateiformaten. Einige Formate werden von .xsds angegeben, andere von der Dokumentation auf den jeweiligen Websites, und einige sind benutzerdefinierte interne Formate, für die keine Dokumentation vorhanden ist. Mwahahahaha.
Was ist das Problem?
Ich möchte meine Dateireader testen, bin mir aber nicht ganz sicher, wie ich das machen soll. Der Ablauf der Anwendung ist wie folgt:
file.___ ===> read by FileReader.java ===> which creates a Model object
Wo ist die FileReader
Schnittstelle
public interface FileReader {
public Model read(String filename);
}
Die Model
hat eine Reihe von Attributen, die beim Lesen der Datei ausgefüllt werden. Es sieht ungefähr so aus
public class Model {
List<String> as;
List<String> bs;
boolean isAPain = true;
// ...
}
Was habe ich versucht?
Meine einzige Idee war, Datei "Generatoren" für jedes Dateiformat zu erstellen. Bei diesen Generatoren handelt es sich im Grunde genommen um Builder, die einige Variablen (z. B. die Anzahl der zu generierenden Kommentare in einer Datei) aufnehmen und eine Beispieldatei ausgeben, die ich dann einlese und Model
mit den Variablen vergleiche, mit denen ich die Datei ursprünglich generiert habe.
Dies hat jedoch einige Probleme:
- Die Dateien , die es erzeugt nicht aussehen wie echte Dateien. Der Generator ist in keiner Weise kontextbezogen.
- Es ist schwer zu erkennen, ob der Generator für Flankenfälle generiert hat, da ich die Variablen manuell einstelle. Diese Methode ist kaum besser als ich, wenn ich ein Dutzend Beispieldateien erstelle.
Gibt es dafür bessere Möglichkeiten?
EDIT: Unit auf Integration umgestellt, da ich das eigentlich meine.
EDIT2: Hier ist ein Beispiel für die Randfälle, die ich erwähnt habe.
Jede Datei stellt ein Diagramm dar, das aus Eckpunkten und Kanten besteht. Diese Eckpunkte und Kanten können auf verschiedene Arten verbunden werden:
v1 -- e1 --> v2 <-- e2 -- v3
unterscheidet sich von
v1 -- e1 --> v2 -- e2 --> v3
, dass die Richtung der Kanten von Bedeutung ist. Ich bin mir nicht sicher, ob dies im Rahmen der Frage liegt, aber es ist schwierig, alle relevanten Kantenfälle zu erdenken, wenn ich die Anzahl der Scheitelpunkte und Kanten manuell einstelle und die Verbindungen nur zufällig generiere.
FileReader
Implementierung ausgelöst werden könnten )? Beispiel: Unter Berücksichtigung der in Bilddateiformaten gefundenen Randfälle sollte für jeden Tabelleneintrag, wenn die Zeilen- / Spaltenkombination von Eigenschaften unterstützt wird, mindestens ein Testfall (eine Datendatei) vorhanden sein, der diese Kombination abdeckt.Antworten:
Lassen Sie uns zunächst über Ihre Ziele sprechen:
Sie möchten offensichtlich keine "Dateiformate" testen - Sie möchten Ihre verschiedenen
FileReader
Implementierungen testenSie möchten durch automatische Tests so viele verschiedene Arten von Fehlern wie möglich finden
Um dieses Ziel vollständig zu erreichen, müssen Sie, meiner Meinung nach, verschiedene Strategien kombinieren:
FileReader
Implementierungen bestehen aus vielen verschiedenen Teilen und Funktionen. Schreiben Sie kleine Tests, bei denen jeder einzeln getestet wird. Gestalten Sie Ihre Funktionen so, dass sie die Daten nicht unbedingt aus einer Datei lesen müssen. Diese Art von Tests wird Ihnen helfen, die meisten Ihrer Randfälle zu testen.FileReader
s korrekt ausgewertet werden. Es kann sich jedoch lohnen, dies zu tun, da häufig Fehler gefunden werden, die von den ersten beiden Strategien nicht aufgedeckt wurden. Manche Leute würden solche Dinge auch "Integrationstests" nennen, andere bevorzugen "Akzeptanztests", aber in Wirklichkeit spielt der Begriff keine Rolle.Meiner Meinung nach gibt es keinen "Shortcut" -Ansatz, mit dem Sie alle drei Strategien "zum Preis von einer" nutzen können. Wenn Sie Randfälle sowie Fehler in Standardfällen und in realen Fällen erkennen möchten, müssen Sie mindestens einige - wahrscheinlich auch große - Anstrengungen unternehmen. Glücklicherweise können alle diese Ansätze verwendet werden, um automatische, wiederholbare Tests zu erstellen.
Darüber hinaus sollten Sie sicherstellen, dass Ihre
FileReader
s beim Lesen dieser Daten keine Fehler maskieren - erstellen Sie integrierte Überprüfungen / Behauptungen, werfen Sie Ausnahmen, wenn intern etwas schief geht usw. Dadurch hat Ihr Testcode eine viel bessere Chance, Fehler zu erkennen Auch wenn Sie keine explizite Testdatei oder keinen Testfall für eine unerwartete Situation haben.quelle