首页 > 解决方案 > AutoFixture 自定义与构建

问题描述

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

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

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

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

另一个是使用Customize

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

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

标签: c#autofixture

解决方案


.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"

圣书的相关页面:

  1. 自定义:使用 AutoFixture 自定义类型的生成器
  2. Build.Do.With:做 Redux

推荐阅读