Wie kann Autofixtion eine Instanz eines Typs erstellen, der Eigenschaften mit einem Schnittstellentyp enthält?

8

Ich habe so eine Klasse:

%Vor%

Um die IPagination-Schnittstelle soll ein dynamischer Proxy erstellt und der Proxy mit Testdaten gefüllt werden. Ist es nun möglich, dass AutoFixture eine Instanz des ViewModel-Typs erstellt? Beachten Sie, dass ich den Typ nur zur Laufzeit kenne ( typeof(ViewModel) ).

Inzwischen weiß ich, dass ich das tun kann:

%Vor%     
Rookian 18.10.2012, 07:33
quelle

2 Antworten

4

Theoretisch sollte es möglich sein, die Eigenschaften einer automatisch gespielten Instanz zu füllen.

Angenommen, die Eigenschaft IPagination<T> des Typs ViewModel ist definiert als:

%Vor%

Wir könnten eine ad-hoc automatische Spottanpassung erstellen, z. MyCustomization .

%Vor%

Dann wird der folgende Aufruf eine Instanz von ViewModel erstellen (die nur zur Laufzeit bekannt ist) , eine automatisch gemachte Instanz der IPagination<Data> - und zuweisen-Werte bereitstellen zu den Eigenschaften.

%Vor%

MeineAnpassung

  

Bevor Sie diese Anpassung anwenden, beachten Sie bitte, dass dies nur für dieses spezielle Szenario funktionieren sollte (also die ad-hoc in der Beschreibung). Ich würde dringend empfehlen, eine der Erweiterungen für Auto Mocking, AutoMoq , AutoRhinoMocks , AutoFakeItEasy oder AutoNSubstitute überall sonst.

%Vor%     
Nikos Baxevanis 18.10.2012, 15:31
quelle
2

Eine einfache Möglichkeit besteht darin, eine Factory-Methode zu registrieren:

%Vor%

Damit AutoFixture automatisch Proxys für Schnittstellen erstellt, die Sie mit einer der automatischen Spottanpassungen verwenden möchten,

  • AutoMoqCustomization
  • AutoRhinoMockCustomization
  • AutoFakeItEasyCustomization

In diesem Fall wird eine Instanz der Schnittstelle erstellt, die eine leere Liste darstellt.
Wenn Sie Testdaten in dieser Liste haben möchten, möchten Sie nicht die automatische Mocking-Anpassung verwenden, sondern eine Anpassung, die die Semantik von IPagination wie beschrieben in diesem Blogpost .
Wenn das zu komplex ist, können Sie immer noch die Methode Register verwenden:

%Vor%     
Daniel Hilgarth 18.10.2012 07:49
quelle

Tags und Links