Wie kann ich verspotte den Typ IEnumerable<T>, so dass ich testen kann, eine Methode, die es erhält
Habe ich eine Methode, die ich testen will, die erwartet, dass ein IEnumerable<T>
als parameter.
Ich bin derzeit Spott der Inhalt der IEnumerable<T>
wie folgt (Mit Moq):
var mockParent = new Mock<ICsvTreeGridExportable>();
var mockChild = new Mock<ICsvTreeGridExportable>();
Wie er diese verspottet, Objekte innerhalb einer IEnumerable<T>
so dass ich übergeben Sie als parameter an die Methode, die ich testen möchte?
Die Methode, die ich Teste zu erhalten erwartet ein IEnumerable<ICsvTreeGridExportable>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde einfach erstellen ein array mit der Auflistung intialiser syntax. also
Arrays in .NET-Implementierung der
IEnumerable<T>
- Schnittstelle, so dass Sie sind alle gesetzt.Hinweis: Wenn Sie möchten, eine "Reine"
IEnumerable<T>
(wie Lukas hervorhebt), Sie könnte verwenden Sie ein wenig von LINQ zu tun:Könnte man einfach ein array erstellen. (Arrays implementieren die
IEnumerable<T>
- interfaces).Wenn Sie wollen ein "reines"
IEnumerable<T>
können nicht gewirkt werden, wieder in ein array etc, dann könnten Sie es über eine helper-Methode:(Jamie erwähnt in den Kommentaren, die Sie verwenden müssen, die verspottet Objekte, nicht die
Mock
Objekte. Zum BeispielmockParent.Object
,mockChild.Object
etc, nicht nurmockParent
odermockChild
.)CreateEnumerable
Methode ist genau das, was ich ursprünglich erwogen, aber es hat nicht wirklich irgendeinen Vorteil über ein array. Der compiler generiert eine dummy-Klasse sowieso, also meh. Wenn Sie jedoch möchten, lazy-Initialisierung (siehe sebastian ' s Antwort), kann es nützlich sein.IEnumerable<T>
aber dann blind gewirktIList<T>
oder ähnliches intern. Wenn Sie testen Sie diese Methoden ein array oder eine Liste, dann Sie ' ll-pass, test mit einer "reinen"IEnumerable<T>
und finden Sie den Fehler!Sie könnte so etwas wie dies:
Erstellen Sie eine Dummy-Funktion
Und in der test-Funktion ist etwas wie
hoffe es hilft
IEnumerable
von mehr als einem element.Dummy()
- Funktion gehen, um eine nie endende Reihe von Objekten?Hier ist eine alternative zu sebastian ' s Antwort, dass Sie angeben können, wie viele dummies jeglicher Art, die Sie wollen:
Oder (wenn Sie verwenden möchten in der Lage sein zu verwenden, Typen ohne leere Konstruktoren):