Betrachten Sie eine Methode zum zufälligen Mischen von Elementen in einem Array. Wie würden Sie einen einfachen, aber robusten Komponententest schreiben, um sicherzustellen, dass dies funktioniert?
Ich habe zwei Ideen entwickelt, die beide bemerkenswerte Mängel aufweisen:
- Mische das Array und stelle dann sicher, dass seine Reihenfolge von der vorherigen abweicht. Dies hört sich gut an, schlägt jedoch fehl, wenn die Zufallswiedergabe in derselben Reihenfolge erfolgt. (Unwahrscheinlich, aber möglich.)
- Mische das Array mit einem konstanten Startwert und vergleiche ihn mit der vorgegebenen Ausgabe. Dies beruht darauf, dass die Zufallsfunktion bei gleichem Startwert immer dieselben Werte zurückgibt. Dies ist jedoch manchmal eine ungültige Annahme .
Stellen Sie sich eine zweite Funktion vor, die Würfelwürfe simuliert und eine Zufallszahl zurückgibt. Wie würden Sie diese Funktion testen? Wie würdest du testen, dass die Funktion ...
- Gibt niemals eine Zahl außerhalb der angegebenen Grenzen zurück?
- gibt Zahlen in einer gültigen Verteilung zurück? (Uniform für einen Würfel, normal für viele Würfel.)
Ich bin auf der Suche nach Antworten, die Einblicke in das Testen nicht nur dieser Beispiele, sondern allgemeiner zufälliger Codeelemente bieten. Sind Unit Tests auch hier die richtige Lösung? Wenn nein, welche Art von Tests sind das?
Nur um es allen leichter zu machen, schreibe ich nicht meinen eigenen Zufallsgenerator.