Was bewirkt CreateMany mit Seed?

8

Was macht die CreateMany Überladung mit dem Parameter T seed ? Ich habe versucht zu säen, aber der Seed scheint keine Wirkung auf die erstellten Objekte zu haben. Zum Beispiel erwartete ich, dass, wenn mein Seed eine Eigenschaft vom Typ string hätte, dass entweder:

  • Der Zeichenfolgenwert wird verwendet, um diese Eigenschaft in allen neu erstellten Objekten aufzufüllen

  • oder der Zeichenfolgenwert wird als Präfix verwendet, wenn diese Eigenschaft in allen neu erstellten Objekten

  • festgelegt wird
SFun28 11.02.2015, 19:32
quelle

1 Antwort

14

tl; dr

In der Regel garantiert AutoFixture nicht wie Seed-Werte, wenn überhaupt, während des Erstellungsprozesses verwendet werden. Diese Eigenschaft ergibt sich aus der Art, wie AutoFixture entworfen wurde .

Hintergrund

Jedes Mal, wenn AutoFixture aufgefordert wird, ein Objekt mit einem bestimmten Type zu erstellen, wird die Anfrage über eine Pipeline von Objekten namens" builders ". Jeder Builder ist verantwortlich für die Behandlung einer bestimmten Art von Anfrage (sei es eine Anfrage für einen konkreten Typ , eine Schnittstelle , eine ) Eigenschaft , ein Feld usw.). Wenn ein Builder auf eine Anforderung stößt, die er verarbeiten kann, wird ein Wert zurückgegeben und die Pipeline wird mit der nächsten Anforderung neu gestartet.

Wenn Sie ein Objekt basierend auf einem Seed erstellen möchten, müssen Sie unter AutoFixture sicherstellen, dass der von Ihnen angegebene Startwert eingebettet in die Anfrage , die durch die Pipeline gesendet wird. Dann liegt es an den Bauherren, zu entscheiden, was mit diesem Wert zu tun ist.

Lösung

AutoFixture kommt derzeit mit einem einzelnen Builder , der die Startwerte berücksichtigt und das ist der für Strings .

Sie können AutoFixture jedoch mitteilen, wie sie beim Erstellen von Objekten eines beliebigen Typs verwenden soll, indem Sie eine Fixture speziell für diesen Typ mit die FromSeed Methode :

%Vor%

Die Factory-Funktion , die Sie für FromSeed bereitstellen, wird jedes Mal aufgerufen, wenn AutoFixture eine Instanz von Foo erstellen muss und der Startwert von Fixture übergeben wird. Zum Beispiel:

%Vor%

Der Parameter seed der Factory-Funktion erhält das% seed-Objekt% co_de, für das die Eigenschaft Foo auf Bar gesetzt ist.

    
Enrico Campidoglio 12.02.2015, 11:12
quelle

Tags und Links