2015-05-06 3 views
6

Gibt es eine Möglichkeit in AutoFixture, so dass fixture.Create<string>() das gleiche Ergebnis liefert? D. h., Kann ich die Vorrichtung mit einem Samen initialisieren?Kann ich Zufallswerte in AutoFixture unter Verwendung eines Seeds neu generieren?

aktualisieren

genauer zu sein, ich bin auf der Suche nach einem Zufallswertgenerator, die mit einem zufälligen Samen initialisiert wird, die auch, wenn ein Test ausgegeben wird, ausfällt. Somit kann ich den Samen für diesen bestimmten Testlauf nehmen und den Test mit dem fixierten Samen erneut ausführen. Der Seed sollte für alle Instanzen unabhängig von ihren Typen gelten. Ich denke, dies ist der beste Weg, um zufällige Werte in Tests zu verwenden, weil es eine große Abdeckung hat und auch reproduzierbar ist.

+1

AutoFixture verfügt über keine solche Funktion, da kein globales 'Random'-Objekt zum Generieren von Werten verwendet wird. In all den Jahren, in denen ich es benutzt habe, habe ich noch nie eine solche Funktion gebraucht. Wenn ein Test fehlschlägt, können Sie sie so schreiben, dass der Testbericht immer enthält, welche Werte verwendet wurden. Wenn Sie beispielsweise * AutoFixture.Xunit * verwenden, geschieht dies automatisch. –

+0

BTW, ich weiß, dass FsCheck * hat eine solche Funktion, aber ich benutze es auch nicht dort ... –

+3

Schreiben Sie alle Testdaten, die an einem bestimmten Test teilgenommen hat skaliert nicht wirklich viel. Unter der Annahme, dass es viele von ihnen gibt, werden Sie mit einer riesigen großen Liste enden. Außerdem müssten Sie im Falle eines fehlgeschlagenen Tests alle Testdaten im Test an die gedruckten Werte anpassen. Noch mühsamer ist, dass Sie in jedem Test benutzerdefinierten Code schreiben müssen, solange die Testdaten nicht in einigen Instanzfeldern enthalten sind. Ich glaube wirklich, dass ein gedruckter Samen der Weg ist, hier zu gehen. – Matthias

Antwort

4

Sie befinden sich in einem Merkmal suchen genannt freezing:

var alwaysTheSameString = fixture.Freeze<string>(); 

Wenn Sie möchten, können Sie auch ein string einfrieren basierend auf einem Samen Wert von Ihnen:

var alwaysTheSameFooString = fixture.Freeze<string>("foo"); 

Haltungsart Beachten Sie, dass AutoFixture nur den angegebenen Wert Seed verwendet, wenn Sie aufgefordert werden, Zeichenfolgen zu erstellen. Wenn Sie einen Startwert für einen anderen Typ verwenden möchten, müssen Sie customize it yourself.

+0

Ich interessiere mich mehr für etwas, das typenweit ist. Ich werde meine Frage aktualisieren, um dies klarer zu machen. – Matthias