AutoFixture 自定义与构建

Owa*_*ams 7 c# autofixture

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

var person = fixture.Create<Person>();
Run Code Online (Sandbox Code Playgroud)

但是,如果我想自定义 aPerson的创建方式,我有几个选择。一种是用Build

var person = fixture.Build<Person>()
                    .With(x => x.FirstName, "Owain")
                    .Create();
Run Code Online (Sandbox Code Playgroud)

另一个是使用 Customize

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

所以,我的问题是,上面列出的每种方法的各种优点和缺陷是什么,还有其他/更好的方法吗?

Dun*_*ger 5

.Build<>.With().Create()使用这些属性创建实例。未来对.Create<>()(同一类型)的调用不受影响。

.Customize<>定义了创建类型的额外“步骤”。这意味着所有未来的调用.Create<>()(对于相同类型)都将经历相同的步骤。

基本上,您可以在所有创建的特定类型对象需要相同设置的情况下使用自定义。


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"
Run Code Online (Sandbox Code Playgroud)

圣书的相关页面:

  1. 自定义:使用 AutoFixture 自定义类型的构建器
  2. Build.Do.With:执行 Redux