Ich bin ein n00b zum Komponententest. Ich habe FsCheck.Nunit
und NUnitTestAdapter
von Nuget installiert, und ich versuche, Eigenschafts-basierte Tests zu machen, weitgehend inspiriert von the inestimable Scott Wlaschin.Wie kann ich einen eigenschaftsbasierten Test erneut versuchen, wenn die zufallsgenerierten Eingaben nicht sinnvoll sind?
Ich bin mit dem [<Property>]
Attribut, und ich würde die Fähigkeit, „überspringen“ Eingänge wie die den Test nicht die Anforderungen erfüllen:
[<Property(MaxTest=10)>]
let ``Calling unzipTo with an invalid destination will yield a failure.`` badDest =
if Directory.Exists(badDest)
then // somehow skip to the next randomized input
else // do the actual test
Was ist der einfachste Weg, dies zu tun?
Ich würde eine Antwort für FsCheck/NUnit bevorzugen, wenn es existiert, aber ich würde auch jedes andere Framework betrachten, deren Tests in Visual Studio ausgeführt werden können. (Ich dachte, ich sah ein Framework, wo es eine einfache Funktion gab, um genau das zu tun, aber ich kann nicht herausfinden, was es war.)
Ich habe FsCheck.NUnit bisher bevorzugt, weil es zufällige Eingaben für F # generieren kann Typen (diskriminierte Gewerkschaften usw.) ohne zusätzliche Arbeit.
Sie benötigen einen benutzerdefinierten Generator. –
IIRC für die then-Anweisung müssen Sie nur das Ergebnis zurückgeben, das besagt, dass der Test erfolgreich war, ohne den Test auszuführen. Etwas so Einfaches wie "Wahr" könnte funktionieren.Ich bin in diese Jahre zurückgelaufen und das Problem war das Problem zu überdenken. Denken Sie daran, dass der Test nur eine Funktion ist und der Testfahrer nur ein Ergebnis haben will, das auf Erfolg oder Misserfolg hinweist, also geben Sie ihm einen Erfolg. –
@Guy Coder Der Unterschied ist, dass ich möchte, dass der Test mit verschiedenen Zufallseingaben erneut ausgeführt wird, wenn die generierten nicht nützlich sind - ich möchte nicht, dass die Funktion viele Male mit ungeeigneten Eingaben abläuft und sich selbst als Erfolg deklariert es hat seinen Test nie wirklich durchgeführt. –