2014-01-06 45 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