Ich habe eine Klasse, die dazu gedacht ist, ein zufälliges Passwort mit einer Länge zu generieren, die ebenfalls zufällig ist, aber auf eine definierte minimale und maximale Länge begrenzt ist.
Ich erstelle Unit-Tests und bin mit dieser Klasse auf einen interessanten kleinen Haken gestoßen. Die ganze Idee hinter einem Unit-Test ist, dass er wiederholbar sein sollte. Wenn Sie den Test hundert Mal ausführen, sollte er hundert Mal dieselben Ergebnisse liefern. Wenn Sie von einer Ressource abhängig sind, die möglicherweise nicht vorhanden ist oder sich möglicherweise nicht im erwarteten Ausgangszustand befindet, sollten Sie die betreffende Ressource verspotten, um sicherzustellen, dass Ihr Test wirklich immer wiederholbar ist.
Aber was ist mit den Fällen, in denen das SUT eine unbestimmte Ausgabe erzeugen soll?
Wenn ich die minimale und maximale Länge auf den gleichen Wert festlege, kann ich leicht überprüfen, ob das generierte Passwort die erwartete Länge hat. Wenn ich jedoch einen Bereich zulässiger Längen (z. B. 15 bis 20 Zeichen) spezifiziere, haben Sie jetzt das Problem, dass Sie den Test hundertmal ausführen und 100 Durchgänge erhalten könnten, aber beim 101. Durchgang erhalten Sie möglicherweise eine 9-Zeichen-Zeichenfolge zurück.
Bei der Kennwortklasse, die im Kern recht einfach ist, sollte sich dies nicht als großes Problem herausstellen. Aber ich habe über den allgemeinen Fall nachgedacht. Welche Strategie wird normalerweise als die beste angenommen, wenn es um SUTs geht, die vom Design her eine unbestimmte Ausgabe generieren?