c# - 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>();
所以,我的问题是,上面列出的每种方法的各种优点和缺陷是什么,还有其他/更好的方法吗?
解决方案
.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"
圣书的相关页面:
- 自定义:使用 AutoFixture 自定义类型的生成器
- Build.Do.With:做 Redux
推荐阅读
- r - 根据其他数据帧中指定的不同时间范围对数据帧进行子集
- java - 更新 java 中的 sqlite_sequence 表
- recursion - clang 是否支持 CUDA __global__ 函数递归?
- java - jax-RS 项目部署成功,但使用 IE 打开 URL 时出现 404 错误
- c# - 监听服务器端 C# 代码中活动的更新
- ios - "unrecognized selector sent to instance" when selector is in other file
- php - 我的照片没有上传到数据库和文件
- gradle - 如何持续启用 Gradle 文件系统监视?
- javascript - 如何为多个单选按钮 Laravel Javascript 设置和获取 cookie
- c# - 将二维数组保存为 JSON