2014-01-06 2 views
8

Допустим, мы имеем тип перечисления определяется как:Создать анонимную значение перечисления из подмножества всех значений

enum Statuses 
{ 
    Completed, 
    Pending, 
    NotStarted, 
    Started 
} 

Я хотел бы сделать Autofixture создать значение для меня, кроме, например, В ожидании.

Так (предполагается, что поколение круглый робин) Я хотел бы получить:

Завершенный, NotStarted, работы, завершено, NotStarted ...

+0

Это [один способ сделать это] (http://stackoverflow.com/a/17117080/467754). –

+0

К сожалению, не работает: AutoFixture не смог создать экземпляр из Ploeh.AutoFixture.Kernel.ISpecimenBuilderComposer, скорее всего, потому, что у него нет открытого конструктора, является абстрактным или непубличным. – dzendras

+0

Какую версию AutoFixture вы используете? С помощью AutoFixture 3, если вы используете 'fixture.Create ()' (где 'fixture' является экземпляром' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '', вы получите циклическое значение. Вам даже не понадобится [ссылка] (http://stackoverflow.com/a/17117080/467754), о которой я упоминал ранее. Если это не сработает, было бы здорово, если бы вы могли обновить вопрос с помощью некоторого кода, который воспроизводит то, что вы описываете ... –

ответ

13

Самый простой способ сделать это с AutoFixture-х Generator<T> :

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

Если вам нужно только одно значение, но хотите быть уверены, что это не Statuses.Pending, вы можете сделать это:

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

Есть и другие способы, но это самый простой вариант для специального запроса.

+0

Я заинтересован в том, чтобы делать что-то подобное, но полностью общее для любого типа Enum. Я хочу игнорировать любые значения на основе совпадений строк, например. Неизвестно или неинициализировано. Есть ли способ перехватить значения, возвращаемые EnumGenerator? – Schneider

+1

@Schneider Сложно. Новый вопрос, пожалуйста. –

+0

Спасибо, Марк. Вот qn http://stackoverflow.com/questions/41628519/how-to-exclude-certain-enumerations-from-all-enumeration-types – Schneider