【发布时间】:2017-01-19 15:25:58
【问题描述】:
我的目标是能够只定义与特定测试相关的参数,在 c# 中使用不可变类型(严格构造函数注入,没有 set'ers),并有一个定制的夹具来处理参数的有效值未在测试中指定。
在这个问题上摸不着头脑 - 我对字符串、DateTime 和 int 的“with”属性自定义被忽略了。基于“客人”的示例:
public class Guest
{
public readonly string GuestId;
public readonly string GivenName;
public readonly string SurName;
public readonly AgeCode AgeCategory;
public Guest(string guestid, AgeCode ageCategory, string givenName, string surName)
{
AgeCategory = ageCategory;
GivenName = givenName;
SurName = surName;
GuestId = guestid;
}
}
我像这样自定义一个 Fixture 实例:
fixture.Customize<Guest>(composer =>
composer
.With(g => g.GivenName, "Finn")
.With(g => g.GuestId, "1")
.With(g => g.SurName, "Rasmussen")
);
...在使用fixture.Create<Guest>() 时有效,但在使用fixture.Build<Guest>().With(g=>g.Surname, "Olsen") 时无效。
查看 AutoFixture 签名,我知道这是因为 Fixture.Build<T>() 实例化了一个新的作曲家,并且该作曲家没有作为 Customize<T> 方法的“作曲家”实例注入。
另外-我知道属性的第一个自定义“获胜”,因此必须将“覆盖”推到自定义前面...
有什么建议吗?我是不是完全不了解,想用螺丝刀敲钉子?或者我只是在这里没有看到一些聪明和/或明显的东西......
【问题讨论】:
-
感谢马克,感谢您的出色工作!
标签: c# autofixture