AutoFixture 自定义 vs 构建

9

我知道我可以使用 AutoFixture 来创建一个自动模拟的实例。

var person = fixture.Create<Person>();

但是,如果我想自定义创建Person的方式,我有几个选项。其中一个是使用Build

var person = fixture.Build<Person>()
                    .With(x => x.FirstName, "Owain")
                    .Create();

另一种方法是使用自定义

fixture.Customize<Person>(c => c.With(x => x.FirstName, "Owain"));
var person = fixture.Create<Person>();

那么,我的问题是,上述每种方法的优点和缺点有哪些,还有其他/更好的方法吗?

1个回答

5
.Build<>.With().Create() 创建具有这些属性的实例。对于同一类型,以后调用.Create<>() 不会受到影响。 .Customize<> 定义类型创建的额外“步骤”。这意味着所有对于同一类型的未来调用 .Create<>() 都将通过相同的步骤进行。
基本上,您将使用 customize 来处理所有特定类型的已创建对象都需要相同设置的情况。
var person_1 = fixture.Build<Person>()
    .With(x => x.FirstName, "Owain")
    .Create();

var person_2 = fixture.Create<Person>();

fixture.Customize<Person>(c => c.With(x => x.FirstName, "Owain"));
// All subsequent calls to Create for type Person will use the customization.

var person_3 = fixture.Create<Person>();
var person_4 = fixture.Create<Person>();

//person_1.FirstName == "Owain"
//person_2.FirstName != "Owain"
//person_3.FirstName == "Owain"
//person_4.FirstName == "Owain"

圣书中相关页面:

  1. 自定义:使用 AutoFixture 自定义类型生成器
  2. Build.Do.With:重构 Do

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接