Autofixture: Nicht generische Create(Type)-Methode hinzufügen

Erstellt am 19. Nov. 2015  ·  2Kommentare  ·  Quelle: AutoFixture/AutoFixture

Ich (ab)nutze Autofixture, um Dokumentationsbeispiele für eine Web-API zu generieren. Die Nachrichten (Befehle und Abfragen), die Autofixture für mich erstellt, werden in JSON serialisiert und werden Teil der Dokumentation. Das funktioniert wirklich sehr gut und erfordert ein paar Codezeilen, verglichen mit den Hunderten von hässlichen Codezeilen, die die VS-Vorlage für die Web-API in ihrem /HelpPage-Bereich generiert (yuck).

Zur Zeit verwende ich folgenden Code, um dies zu erreichen:

``` c#
private static readonly MethodInfo CreateMethodInfo =
GetMethod(() => SpecimenFactory.Create(neues Gerät ()))
.GetGenericMethodDefinition();

öffentliches statisches Objekt Create(Type type)
{
var Fixture = new Fixture();
int-Index = 1;
Fixture.Register(() => "Beispieltext" + index++);

return CreateMethodInfo.MakeGenericMethod(type).Invoke(null, new object[] { fixture });

}

private statische MethodInfo GetMethod(Ausdruck> methodCall) =>
((MethodCallExpression)methodCall.Body).Method;
```

Da ich die genaue Nachricht zur Kompilierzeit nicht kenne, kann ich die Methode Fixture.Create<T>() Autofixture nicht aufrufen. Wie der obige Code zeigt, habe ich dies derzeit gelöst, indem ich diese generische Methode Create<T> mithilfe von Reflektion aufrufe.

Gibt es eine einfachere Möglichkeit, mein Ziel zu erreichen, und wenn nicht, könnte der Bibliothek eine nicht generische Methode Create(Type) hinzugefügt werden?

Hilfreichster Kommentar

Würde diese Lösung funktionieren?

c# var specimen = new SpecimenContext(fixture).Resolve(type);

Alle 2 Kommentare

Würde diese Lösung funktionieren?

c# var specimen = new SpecimenContext(fixture).Resolve(type);

Cool! Das macht den Trick! Vielen Dank.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen