- Zufällige Eingabe - Die Tests würden nicht wiederholbar (erzeugen jedes Mal, wenn sie ausgeführt werden, einheitliche Ergebnisse und werden daher nicht als gute Einheitstests betrachtet. Tests sollten ihre Meinung nicht ändern.
- Range-Tests / RowTests - sind gut, solange sie nicht verlangsamen die Test-Suite laufen.. jeder Test sollte als laufen schnell wie möglich. (Eine Testreihe, die in 30 Sekunden erledigt ist, wird häufiger ausgeführt als eine, die 10 Minuten dauert) - vorzugsweise 100 ms oder weniger. Das heißt, jede Eingabe (Testdaten) sollte "repräsentativ" sein. Wenn alle Eingabewerte gleich sind, bringt das Testen jedes einzelnen keinen zusätzlichen Nutzen und ist nur routinemäßige Zahlenknackerei. Sie brauchen nur einen Repräsentanten aus dieser Gruppe von Werten. Sie brauchen auch Repräsentanten für Randbedingungen und "besondere" Werte.
Mehr über Leitlinien oder Daumenschrauben - siehe Was macht einen guten Einheitstest aus?
Abgesehen davon könnten die von Ihnen erwähnten Techniken gut geeignet sein, um finden. repräsentative Eingänge.. Benutzen Sie sie also, um SzenarioX zu finden, in dem Code fehlschlägt oder nicht richtig funktioniert - schreiben Sie dann einen wiederholbaren, schnellen, testbaren Unit-Test für dieses SzenarioX und fügen Sie ihn zu Ihrer Testsuite hinzu. Wenn Sie feststellen, dass diese Werkzeuge Ihnen weiterhin helfen, mehr gute Testfälle zu finden, bleiben Sie dabei.
Antwort auf die Klarstellung des Auftraggebers:
- Wenn Sie bei jedem Testlauf den gleichen Startwert (Testeingabe) für Ihren Zufallsgenerator verwenden, ist Ihr Test nicht zufällig - die Werte können vorher festgelegt werden. Ein Unit-Test sollte jedoch idealerweise keine Eingabe/Ausgabe benötigen - deshalb haben xUnit-Testfälle die Signatur void TC().
- Wenn Sie bei jedem Durchlauf unterschiedliche Seed-Werte verwenden, sind Ihre Tests zufällig und nicht wiederholbar. Natürlich können Sie den speziellen Seed-Wert in Ihren Log-Dateien ausfindig machen, um herauszufinden, was fehlgeschlagen ist (und den Fehler zu reproduzieren), aber ich mag es, wenn meine Tests mich sofort wissen lassen, was fehlgeschlagen ist - z. B. lässt mich ein roter TestConversionForEnums() wissen, dass der Code für die Enum-Konvertierung fehlerhaft ist, ohne dass ich ihn untersuchen muss.
Wiederholbar - bedeutet, dass der Test jedes Mal, wenn er auf dem SUT ausgeführt wird, dasselbe Ergebnis liefert (bestanden/nicht bestanden) und nicht "Kann ich den Testfehler erneut reproduzieren? Wiederholbar != Reproduzierbar ). Um es noch einmal zu wiederholen diese Art von exploratives Testen kann gut sein, um mehr Testfälle zu identifizieren, aber ich würde dies nicht zu meiner Testsuite hinzufügen, die ich jedes Mal ausführe, wenn ich im Laufe des Tages eine Codeänderung vornehme. Ich würde empfehlen, explorative Tests manuell durchzuführen, ein paar gute (manche sagen auch sadistische) Tester zu finden, die mit Hammer und Zange auf Ihren Code eindreschen - so finden Sie mehr Testfälle als mit einem Zufallsgenerator.