Ich habe ISpecimenBuilder für meine Modelle definiert und benutze es so:
%Vor% Ich möchte es in den meisten meiner Tests bezüglich des Modells verwenden. Ich möchte auch eine Form der Nachbearbeitung in einer meiner Testklassen anwenden. Insbesondere möchte ich die Eigenschaft CompanyHistory
aller erstellten Offers
füllen. Es fühlt sich an, als könnte es so gemacht werden:
Aber Build<T>
deaktiviert alle Anpassungen und ich brauche sie.
Kann ich so etwas machen?
%Vor%Oder sollte ich mein eigenes Verhalten schreiben? Wenn ja, kann mir dazu jemand Richtlinien geben?
BEARBEITEN : Ich glaube, ich muss betonen, dass ich meine gemeinsame Anpassung (ModelCustomization) und Postprocessor
verwenden möchte BEARBEITEN 2 :
Was ich von Anfang an meinte ist, dass ModelCustomization
Offer
erzeugen kann (und sollte) und mein zukünftiger Postprozessor sollte diese bereits erstellte Probe verwenden und einige seiner Eigenschaften füllen.
Ich schrieb am Ende folgende Anpassung:
%Vor% Das funktioniert, aber es ist alles andere als perfekt. Wie Sie sehen können, verweise ich direkt auf ModelSpecimenBuilder
, so dass ich von der Implementierung abhängig bin (als Postprozessor möchte ich nicht sein).
Die Antwort, die von @ Nikos gepostet wird, ist nicht befriedigend, da seine Anpassung vorherige Anpassungen in der Verantwortungskette ignoriert.
Wenn wir die Create-Methode aufrufen, ruft CompositeSpecimenBuilder die Create-Methode aller enthaltenen Builder auf, bis einer von ihnen eine Probe bereitstellt. An dieser Stelle gilt die Anforderung als erfüllt und die restlichen Builder werden ignoriert.
Quelle: AutoFixture-Dokumentation
So können Sie in diesem Fall Postprocessor
erstellen und verwenden:
Der Befehl OfferFiller
ist definiert als:
Der OfferSpecification
ist definiert als:
Ich hatte ein ähnliches Problem und habe die hier erwähnten Lösungen ausprobiert, aber sie haben nicht wie erwartet funktioniert. Schließlich habe ich eine Implementierung einer Klasse PostProcessWhereIsACustomization gefunden, die genau das tut, was ich brauchte:
Anpassung der AutoFixture, um das Einfügen beliebiger Nachbearbeitungslogik zu ermöglichen a la Customize (c = & gt; c.Do ()), aber auf eine globale Art und Weise Überarbeitet für v3 (ursprünglich für v2)
Darf jemand googeln.
Tags und Links c# autofixture