2014-01-06 11 views
8

Sagen wir, wir haben ein Aufzählungstyp definiert als:erstellen anonyme Enum-Wert aus einer Teilmenge aller Werte

enum Statuses 
{ 
    Completed, 
    Pending, 
    NotStarted, 
    Started 
} 

Ich möchte Autofixture schaffen Wert für mich andere machen, als z.B. Steht aus.

So (Round-Robin-Generation vorausgesetzt) ​​Ich mag würde erhalten:

abgeschlossen, NotStarted, Started, Abgeschlossen NotStarted, ...

+0

Hier ist [eine Möglichkeit, es zu tun] (http://stackoverflow.com/a/17117080/467754). –

+0

Leider funktioniert das nicht: AutoFixture konnte keine Instanz von Ploeh.AutoFixture.Kernel.ISpecimenBuilderComposer erstellen, höchstwahrscheinlich weil es keinen öffentlichen Konstruktor hat, ein abstrakter oder nicht-öffentlicher Typ ist. – dzendras

+0

Welche Version von AutoFixture verwenden Sie? Wenn Sie mit AutoFixture 3 'fixture.Create ()' (wobei 'fixture' eine' neue Fixture() '-Instanz ist) erhalten Sie jeden' ​​Status' enum-Wert in einer Round-Robin-Weise. Sie werden nicht einmal das [link] (http://stackoverflow.com/a/17117080/467754) benötigen, das ich vorher erwähnte. Wenn das nicht funktioniert, wäre es großartig, wenn Sie die Frage mit Code aktualisieren könnten, der das wiedergibt, was Sie beschreiben ... –

Antwort

13

Der einfachste Weg, dies zu tun, ist mit AutoFixture der Generator<T> :

var statuses = fixture 
    .Create<Generator<Statuses>>() 
    .Where(s => Statuses.Pending != s) 
    .Take(10); 

Wenn Sie nur einen einzigen Wert benötigen, aber sicher sein wollen, dass es nicht Statuses.Pending ist, können Sie dies tun:

var status = fixture 
    .Create<Generator<Statuses>>() 
    .Where(s => Statuses.Pending != s) 
    .First(); 

Es gibt auch andere Möglichkeiten, aber dies ist am einfachsten für eine Ad-hoc-Abfrage.

+0

Ich interessiere mich für etwas Ähnliches, aber völlig generisch für jeden Enum-Typ. Ich möchte alle Werte basierend auf Zeichenfolgenübereinstimmungen ignorieren, z. Unbekannt oder Nicht initialisiert. Gibt es eine Möglichkeit, die von EnumGenerator zurückgegebenen Werte abzufangen? – Schneider

+1

@Schneider Kompliziert. Neue Frage, bitte. –

+0

Danke Mark. Hier ist der qn http://stackoverflow.com/questions/41628519/how-to-exclude-certain-enumerations-from-all-enumeration-types – Schneider

Verwandte Themen