2014-01-06 44 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'是一個新的Fixture()'實例),你將以循環方式得到每個'Statuses'枚舉值。你甚至不需要我之前提到的[鏈接](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

我有興趣做類似的事情,但對任何枚舉類型完全一般。我想忽略任何基於字符串匹配的值,例如未知或未初始化。有沒有辦法阻止EnumGenerator返回的值? – Schneider

+1

@Schneider複雜。請提出新問題。 –

+0

謝謝馬克。這裏是qn http://stackoverflow.com/questions/41628519/how-to-exclude-certain-enumerations-from-all-enumeration-types – Schneider