我想使用AutoFixture
创建自定义对象的列表。我希望第一个N
对象具有一个属性设置为一个值,其余的设置为另一个值(或仅由Fixture
的默认策略设置)。如何为列表中的项目的子范围分配属性?
我知道我可以使用Fixture.CreateMany<T>.With
,但是这适用于所有函数的列表成员。
在NBuilder
中有提供此功能的名为TheFirst
和TheNext
(以及其他)的方法。其使用的一个例子:
提供类Foo
:
class Foo
{
public string Bar {get; set;}
public int Blub {get; set;}
}
一个可以实例一堆Foo
就像这样:
class TestSomethingUsingFoo
{
/// ... set up etc.
[Test]
public static void TestTheFooUser()
{
var foosToSupplyToTheSUT = Builder<Foo>.CreateListOfSize(10)
.TheFirst(5)
.With(foo => foo.Bar = "Baz")
.TheNext(3)
.With(foo => foo.Bar = "Qux")
.All()
.With(foo => foo.Blub = 11)
.Build();
/// ... perform the test on the SUT
}
}
这给出了Foo
类型的对象的列表以下属性:
[Object] Foo.Bar Foo.Blub
--------------------------------
0 Baz 10
1 Baz 10
2 Baz 10
3 Baz 10
4 Baz 10
5 Qux 10
6 Qux 10
7 Qux 10
8 Bar9 10
9 Bar10 10
(本Bar9
和Bar10
值代表NBuilder
的默认命名方案)
是否有一个‘内置’的方式来实现这一目标使用AutoFixture
?或者是一种惯用的方式来建立一个像这样的行为?
'Foo'类是什么样的? –
@MarkSeemann我已经用'Foo'扩展了这个例子,使它更清晰一些。如果您的意思是我的真实项目中的“Foo”是代理的实际类,它就是一样的:只有一个带有gettable/settable的'string','int','DateTime'字段的POCO。 – Peter